2010-06-29 78 views
5

Estoy tratando de obtener el valor auto incrementado de una tabla que actualmente es la más alta. No necesito saber cuál es el próximo incremento automático, solo el valor más alto de lo que hay en la tabla en este momento. Estoy usando el código siguiente, pero independientemente de cuál sea el incremento automático real, en qué tabla inserté por última vez, qué tabla fue actualizada/modificada por última vez o cualquier otro factor que pueda ver, el valor siempre devuelve . Esto me deja perplejo por dos razones. Primero, no entiendo por qué el número es siempre 4, segundo, no entiendo por qué estoy recuperando un valor de cadena (con letras y un símbolo) en lugar de sólo un número entero. ¿Cuál es el trato aquí?MySQL MAX (id) llamado desde PHP produce un valor extraño

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

Respuesta

13

mysql_query no devuelve el valor de la consulta, devuelve un recurso resultado. Para obtener el valor real, debe usar una de las funciones mysql_fetch_*, pasándole el recurso de resultado que recibió de mysql_query.

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

o la más corta ...

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

Me siento un poco estúpido publicando eso allí, pero sí, de hecho lo tuve así al principio, pero el resultado fue '' '. Editaré mi publicación para mostrarte lo que probé desde el principio (que es lo que estás sugiriendo). – ubiquibacon

+0

Ok, veo lo que hice mal ahora. Mi código original usé 'mysql_fetch_array' y luego cometí un error donde tienes el' 0' en '$ row [0]'. ¡Gracias por tu ayuda! – ubiquibacon

3

mysql_query devuelve un manejador del resultado, no el resultado real. En otras palabras, el resultado de su consulta se guarda como id. De recurso n. ° 4 (y no se garantiza que sea el mismo siempre, es una coincidencia si lo ve de esa manera todo el tiempo).

Para acceder al resultado necesita usar algo como mysql_fetch_array o alguna de las otras funciones de la misma familia.

Algo como esto:

<?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

Muy conciso, pero debería ser: $ highest_id = mysql_result (mysql_query ("SELECT MAX (c_id) FROM customers"), 0); – TomWilsonFL

0

la forma de hacer esto suponga que tiene la base de datos ($ this-> db)

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

Este es mi respuesta:

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]; 

Cuando usa mysqli_fetch_row, solo obtendrá una fila, ya que solo queremos una fila. $row será una matriz. Entonces, necesitamos obtener su valor a través del índice de matriz.

Cuestiones relacionadas