2010-06-29 18 views
5

Sto solo cercando di ottenere il valore auto incrementato di una tabella che è attualmente la più alta. Non ho bisogno di sapere quale sia il prossimo incremento automatico, solo il valore più alto di ciò che è nella tabella in questo momento. Sto usando il codice qui sotto, ma indipendentemente da quale sia l'incremento automatico effettivo, quale tabella ho inserito per ultimo, quale tabella è stata aggiornata/modificata l'ultima volta o altri fattori che posso vedere, il valore restituisce sempre . Questo mi lascia perplessi per due ragioni. Innanzitutto non capisco perché il numero sia sempre 4, in secondo luogo non capisco perché sto recuperando un valore stringa (con lettere e un simbolo) anziché solo un numero intero. Qual è l'affare qui?MySQL MAX (id) chiamato da PHP produce un valore strano

<?php $highest_id = mysql_query("SELECT MAX(c_id) FROM customers"); ?>

risposta

13

mysql_query non restituisce il valore dalla query, restituisce un risorsa risultato. Per ottenere il valore effettivo, è necessario utilizzare una delle funzioni mysql_fetch_*, passandole la risorsa risultato ottenuta da mysql_query.

<?php 
    $result = mysql_query("SELECT MAX(c_id) FROM customers"); 
    $row = mysql_fetch_row($result); 
    $highest_id = $row[0]; 
?> 

o la più breve ...

<?php 
    $highest_id = mysql_result(mysql_query("SELECT MAX(c_id) FROM customers"), 0); 
?> 
+0

Mi sento un po 'stupido postare quello lassù, ma sì, in realtà l'ho fatto in quel modo all'inizio, ma il risultato è stato restituito "". Modificherò il mio post per mostrarti ciò che ho provato all'inizio (che è ciò che stai suggerendo). – ubiquibacon

+0

Ok, vedo cosa ho sbagliato ora. Il mio codice originale che ho usato 'mysql_fetch_array' e poi ho incasinato dove hai il' 0' in '$ row [0]'. Grazie per l'aiuto! – ubiquibacon

3

mysql_query restituisce un handle risultato, non il risultato effettivo. In altre parole, il risultato della tua query viene salvato come ID risorsa n. 4 (e non è garantito che sia sempre lo stesso, è una coincidenza se lo vedi sempre in questo modo).

Per accedere al risultato è necessario utilizzare qualcosa come mysql_fetch_array o una delle altre funzioni della stessa famiglia.

Qualcosa di simile a questo:

<?php 

$query = mysql_query("SELECT MAX(c_id) as max FROM customers"); 
$row = mysql_fetch_array($query); 
$highest_id = $row['max']; 

?> 
0
$highest_id = mysql_result(mysql_query("SELECT MAX(c_id) FROM customers")); 
+0

Molto conciso, ma dovrebbe essere: $ highest_id = mysql_result (mysql_query ("SELECT MAX (c_id) FROM customers"), 0); – TomWilsonFL

0

2015 modo di fare questo
si supponga di avere database ($ this-> db)

$maxid = $this->db->query('SELECT MAX(c_id) FROM `customers`')->fetchColumn(); 
2

Questo è la mia risposta:

require_once 'db_cconnection.php'; 
$query = "SELECT MAX(stud_id) FROM student_tbl"; 
$result = mysqli_query($connection, $query); 
$row = mysqli_fetch_row($result); 
echo $row[0]; 

Quando si utilizza mysqli_fetch_row, verrà recuperata solo una riga, poiché vogliamo una sola riga. $row sarà un array. Quindi dobbiamo ottenere il suo valore attraverso l'indice di array.

Problemi correlati