mysql_result
(PHP 4, PHP 5, PECL mysql:1.0)
mysql_result — Возвращает данные результата запроса
Описание
mysql_result() возвращает значение одной ячейки результата запроса. Аргументом поля может быть смещение, имя поля, или имя поля и имя таблицы через точку (tablename.fieldname). Если к имени колонки, в запросе, был использован алиас ('select foo as bar from...'), используйте его вместо реального имени колонки.
Работая с большими результатами запросов, следует использовать одну из функций, обрабатывающих сразу целый ряд результата. Так как эти функции возвращают значение нескольких ячеек сразу, они НАМНОГО быстрее mysql_result(). Кроме того учтите, что указание численного смещения работает намного быстрее, чем указание колонки, или колонки и таблицы через точку.
Вызовы функции mysql_result() не должны смешиваться с другими функциями, работающими с результатом запроса.
Пример #1 Пример использования mysql_result()
<?php
$link = mysql_connect("localhost", "mysql_user", "mysql_password")
or die("Could not connect: " . mysql_error());
$result = mysql_query("SELECT name FROM work.employee")
or die("Could not query: " . mysql_error());
echo mysql_result($result,2); // outputs third employee's name
mysql_close($link);
?>
Рекомендуемые скоростные альтернативы : mysql_fetch_row(), mysql_fetch_array(), mysql_fetch_assoc() и mysql_fetch_object().
- PHP Руководство
- Функции по категориям
- Индекс функций
- Справочник функций
- Расширения для работы с базами данных
- Расширения для работы с базами данных отдельных производителей
- MySQL Drivers and Plugins
- Оригинальное API MySQL
- mysql_affected_rows
- mysql_client_encoding
- mysql_close
- mysql_connect
- mysql_create_db
- mysql_data_seek
- mysql_db_name
- mysql_db_query
- mysql_drop_db
- mysql_errno
- mysql_error
- mysql_escape_string
- mysql_fetch_array
- mysql_fetch_assoc
- mysql_fetch_field
- mysql_fetch_lengths
- mysql_fetch_object
- mysql_fetch_row
- mysql_field_flags
- mysql_field_len
- mysql_field_name
- mysql_field_seek
- mysql_field_table
- mysql_field_type
- mysql_free_result
- mysql_get_client_info
- mysql_get_host_info
- mysql_get_proto_info
- mysql_get_server_info
- mysql_info
- mysql_insert_id
- mysql_list_dbs
- mysql_list_fields
- mysql_list_processes
- mysql_list_tables
- mysql_num_fields
- mysql_num_rows
- mysql_pconnect
- mysql_ping
- mysql_query
- mysql_real_escape_string
- mysql_result
- mysql_select_db
- mysql_set_charset
- mysql_stat
- mysql_tablename
- mysql_thread_id
- mysql_unbuffered_query
Коментарии
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);
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()
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.
An example of how to easily port this to mysqli would be nice instead of some links to functions that don't really do what this function does.
here's a rough replacement using mysqli:
if (!function_exists('mysql_result')) {
function mysql_result($result, $number, $field=0) {
mysqli_data_seek($result, $number);
$row = mysqli_fetch_array($result);
return $row[$field];
}
}
I was also looking for mysqli replacement for getting first row, when query is known to return just 1 value. It seems this is simple:
echo(mysql_result($result, 0));
becomes
echo($result->fetch_row()[0]);
alternatively
if ($row = $result->fetch_row()) {
echo($row[0]);
}
This function accounts for the ability of the original function to accept "table_name.field_name" entries as well as just the field name:
function mysqli_result($res, $row, $field=0) {
$result->data_seek($row);
$data = $result->fetch_array();
$field_name = $field;
if ( is_string($field) ) {
$fields_array = explode(".", $field);
$array_len = count($fields_array);
if ($array_len > 1) {
$field_name = $fields_array[array_len - 1];
} else {
$field_name = $fields_array[0];
}
}
return $data[$field_name];
}
To replace a row count e.g.
$querystring = "SELECT COUNT(*) FROM table WHERE column1 = 'EXAMPLE'";
$total_records = mysql_result(mysql_query($querystring,$connection),0);
use mysqli_fetch_row :
$querystring = "SELECT COUNT(*) FROM table WHERE column1 = 'EXAMPLE'";
$rowcount = mysqli_fetch_row(mysqli_query($connection,$querystring));
$total_records = $rowcount[0];