The warning against mixing the use of mysql_result with other result set functions is a bit generic. More specifically, mysql_result alters the result set's internal row pointer (at least in a LAMP environment). This is anything but obvious as the nature of the function is random access for grabbing a quick byte. Using mysql_data_seek after some mysql_result calls, before going into a mysql_fetch_array loop, will set things straight.
mysql_result
(PHP 4, PHP 5)
mysql_result — Obtener datos de resultado
Descripción
Recupera el contenido de una celda de un resultset MySQL.
Cuando esté trabajando con resultsets grandes, debería considerar usar una de las funciones que obtienen una fila completa (especificadas más abajo). Debido a que estas funciones retornan el contenido de múltiples celdas en una única llamada a función, son MUCHO MÁS rápidas que mysql_result(). Además, tenga en cuenta que la especificación de un desplazamiento numérico para el campo pasado como argumento es mucho más rápido que especificar nombrecampo o el argumento nombretabla.nombrecampo.
Parámetros
-
result -
El resultado resource que está siendo evaluado. Este resultado proviene de una llamada a mysql_query().
-
row -
El número de fila del resultset que está siendo recuperado. El número de filas empieza a partir de 0.
-
field -
El nombre o el desplazamiento del campo que está siendo recuperado.
Puede ser el desplazamiento de campo, el nombre del campo, o el nombre de la tabla punto nombre del campo (nombretabla.nombrecampo). Si el nombre de la columna ha sido seleccionado con un alias ('select foo as bar from...'), use el alias en lugar del nombre del campo. Si no está definido, el primer campo será seleccionado.
Valores devueltos
El contenido de una celda de un resultset MySQL en caso de éxito, o
FALSE en caso de fallo.
Ejemplos
Ejemplo #1 Ejemplo mysql_result()
<?php
$link = mysql_connect('localhost', 'mysql_user', 'mysql_password');
if (!$link) {
die('Could not connect: ' . mysql_error());
}
if (!mysql_select_db('database_name')) {
die('Could not select database: ' . mysql_error());
}
$result = mysql_query('SELECT name FROM work.employee');
if (!$result) {
die('Could not query:' . mysql_error());
}
echo mysql_result($result, 2); // outputs third employee's name
mysql_close($link);
?>
Notas
Nota:
Las llamadas a mysql_result() no deberían ser mezcladas con llamadas a otras funciones que manejen los resultset.
Ver también
- mysql_fetch_row() - Recupera una fila de resultado como un array numérico
- mysql_fetch_array() - Recupera una fila de resultado como un array asociativo, un array numérico o como ambos
- mysql_fetch_assoc() - Recupera una fila de resultado como un array asociativo
- mysql_fetch_object() - Recupera una fila de resultado como un array objeto
Note that mysql_result affects the internal pointer used by mysql_fetch_*
<?php
$res = mysql_query('SELECT a,b FROM ab');
echo mysql_result($res,0,0);
print_r(mysql_fetch_assoc($res));
?>
In the above example, the call to mysql_fetch_assoc would return the SECOND result, not the first as (I) expected.
Use mysql_data_seek($res,0) to reset the result set.
mysql_result() will throw E_WARNING if mysql_query returns 0 rows. This is unlike any of the mysql_fetch_* functions so be careful of this if you have E_WARNING turned on in error_reporting(). You might want to check mysql_num_rows() before calling mysql_result()
//updated error handling for mysql_evaluate
function mysql_evaluate($query, $default_value=0) {
if (!$result=mysql_query($query)) {
return 0;
}
if (mysql_num_rows($result)==0)
return $default_value;
else
return mysql_result($result,0);
}
// same applies for the mysql_evaluate_array() function
<?
$link = mysql_connect("host", "user", "passw");
mysql_select_db("database", $link);
$number = 3;
$insert = mysql_query("SELECT `test1`.*, `test2`.*,
FROM `test1`, `test2`, `
WHERE ((`test1`.`author` = `test2`.`ID`) AND (`test2`.`ID` ='$number'))
ORDER BY `toetsen`.`autoID` DESC",$link);
echo mysql_result( $insert , 0, 'test1.question') ;
#here he echoes the questions the stuff out of the first table
echo mysql_result( $insert , 0, 'test2.name') ;
#here he echoes the questions the stuff out of the second table
?>
two simple but very useful functions, for converting a query to a value or an array:
<?php
function mysql_evaluate($query, $default_value="undefined") {
$result = mysql_query($query);
if (mysql_num_rows($result)==0)
return $default_value;
else
return mysql_result($result,0);
}
function mysql_evaluate_array($query) {
$result = mysql_query($query);
$values = array();
for ($i=0; $i<mysql_num_rows($result); ++$i)
array_push($values, mysql_result($result,$i));
return $values;
}
?>
http://tora.us.fm/_script/highlight.php?file=sql
Usage examples:
<?php
$customer_count = mysql_evaluate("SELECT COUNT(*) FROM customers");
$customer_names = mysql_evaluate_array("SELECT name FROM customers");
$customer_type = mysql_evaluate("SELECT type FROM customers WHERE name='$name'", "DEFAULT_TYPE");
?>
if you want to do something based on the fact that the data is the same in the next row, then looking ahead is easy with this.
<?php
$i=0;
$rows=mysql_num_rows($result);
while($i < $rows) {
$x = mysql_result($result, $i, 0);
if ($x = mysql_result($result, $i+1, 0)) {
echo "It's the same thing!";
}
}
?>
If you want to fetch the result from a mysql query similar to one of these two queries...
$query = mysql_query("SELECT COUNT(*) FROM table");
$query = mysql_query("SELECT LAST_INSERT_ID()");
... you would use mysql_result() like shown below to retrieve the output as an int.
$result = mysql_result($query, 0, 0);
