Это простой вопрос для пользователей PHP. Причина, по которой я не мог получить точную разницу между mysql_fetch_array()
и mysql_fetch_row()
в PHP, заключается в том, что я много работал с Java.
Прежде чем опубликовать этот вопрос здесь, я получил несколько ответов от Google, но обнаружил, что они несколько запутывают. Некоторые из ссылок, которые я нашел в Интернете, следующие.
Ответ 1
Ответ 2
Ответ 3
Ответ 4
Я не мог получить точную идею из приведенных выше ответов. Итак, какова же разница между ними?
Документация достаточно понятна, посмотрели на нее?
mysql_fetch_array ( resource $result [, int $result_type = MYSQL_BOTH ] )
Возвращает массив строк, соответствующий выбранной строке, или FALSE, если больше строк нет. Тип возвращаемого массива зависит от того, как определяется result_type. Используя MYSQL_BOTH (по умолчанию), вы получите массив с ассоциативными и числовыми индексами. Используя MYSQL_ASSOC, вы получаете только ассоциативные индексы (как работает mysql_fetch_assoc ()), используя MYSQL_NUM, вы получаете только номера индексов (как работает mysql_fetch_row ()) .
mysql_fetch_row ( resource $result )
Возвращает числовой массив строк, соответствующий выбранной строке, или FALSE, если больше строк нет.
mysql_fetch_row () извлекает одну строку данных из результата, связанного с указанным идентификатором результата. Строка возвращается как массив. Каждый столбец результатов хранится в смещении массива, начиная со смещения 0.
В итоге
mysql_fetch_array( $result, MYSQL_ASSOC )
= mysql_fetch_assoc( $result )
mysql_fetch_array( $result, MYSQL_NUM )
= mysql_fetch_row( $result )
А также
mysql_fetch_array ( $result )
= mysql_fetch_assoc( $result )
+ mysql_fetch_row( $result )
Многие новички программирования php запутываются в функциях mysql_fetch_array (), mysql_fetch_row (), mysql_fetch_assoc () и mysql_fetch_object (), но все эти функции выполняют аналогичный процесс.
Создадим таблицу «tb» для четкого примера с тремя полями «id», «username» и «password»,
Таблица: tb
Вставьте новую строку в таблицу со значениями 1 для id, tobby для имени пользователя и tobby78 $ 2 для пароля
db.php
<?php $query=mysql_connect("localhost","root",""); mysql_select_db("tobby",$query); ?>
mysql_fetch_row ()
Получить строку результата в виде числового массива
<html> <?php include('db.php'); $query=mysql_query("select * from tb"); $row=mysql_fetch_row($query); echo $row[0]; echo $row[1]; echo $row[2]; ?> </html>
в<html> <?php include('db.php'); $query=mysql_query("select * from tb"); $row=mysql_fetch_row($query); echo $row[0]; echo $row[1]; echo $row[2]; ?> </html>
результат
1 tobby tobby78 $ 2
mysql_fetch_object ()
Получить строку результата как объект
<html> <?php include('db.php'); $query=mysql_query("select * from tb"); $row=mysql_fetch_object($query); echo $row->id; echo $row->username; echo $row->password; ?> </html>
в<html> <?php include('db.php'); $query=mysql_query("select * from tb"); $row=mysql_fetch_object($query); echo $row->id; echo $row->username; echo $row->password; ?> </html>
результат
1 tobby tobby78 $ 2
mysql_fetch_assoc ()
Извлечь строку результатов как ассоциативный массив
<html> <?php include('db.php'); $query=mysql_query("select * from tb"); $row=mysql_fetch_assoc($query); echo $row['id']; echo $row['username']; echo $row['password']; ?> </html>
в<html> <?php include('db.php'); $query=mysql_query("select * from tb"); $row=mysql_fetch_assoc($query); echo $row['id']; echo $row['username']; echo $row['password']; ?> </html>
результат
1 tobby tobby78 $ 2
mysql_fetch_array ()
Выбираем строку результата как ассоциативный массив, числовой массив, а также выбираем как ассоциативный, так и числовой массив.
<html> <?php include('db.php'); $query=mysql_query("select * from tb"); $row=mysql_fetch_array($query); echo $row['id']; echo $row['username']; echo $row['password']; <span style="color: #993300;">/* here both associative array and numeric array will work. */</span> echo $row[0]; echo $row[1]; echo $row[2]; ?> </html>
в<html> <?php include('db.php'); $query=mysql_query("select * from tb"); $row=mysql_fetch_array($query); echo $row['id']; echo $row['username']; echo $row['password']; <span style="color: #993300;">/* here both associative array and numeric array will work. */</span> echo $row[0]; echo $row[1]; echo $row[2]; ?> </html>
результат
1 tobby tobby78 $ 2
Функция mysql_fetch_object {row / array / assoc} () собирает первую единственную совпадающую запись в соответствующем формате и может быть восстановлена соответствующим образом.
con.php
<?php $host = $_GET['host']; $username = $_GET['username']; $pass = $_GET['pass']; $database = $_GET['database']; $connect=new connect($host,$username,$pass,$database); class connect{ function __construct($host,$user,$password,$db_name){ mysql_connect($host,$user,$password) or die("Connection error"); mysql_select_db($db_name); $error=mysql_error(); if (!empty($error)) { echo $error; } } } ?>
index.php
<?php $query=mysql_query("select * from category"); ?>
Как будет выглядеть каждое значение при сбросе массива в браузере
mysql_fetch_array
$row=mysql_fetch_array($query); var_dump($row);
Вывод:
array 0 => string '1' (length=1) 'id' => string '1' (length=1) 1 => string '1' (length=1) 'createdBy' => string '1' (length=1) 2 => string 'APTITUDE' (length=8) 'catName' => string 'APTITUDE' (length=8) 3 => string 'APTITUDE' (length=8) 'description' => string 'APTITUDE' (length=8) 4 => string '1' (length=1) 'status' => string '1' (length=1)
mysql_fetch_row
$row=mysql_fetch_row($query); var_dump($row);
Вывод:
array 0 => string '1' (length=1) 1 => string '1' (length=1) 2 => string 'APTITUDE' (length=8) 3 => string 'APTITUDE' (length=8) 4 => string '1' (length=1)
mysql_fetch_assoc
$row=mysql_fetch_assoc($query); var_dump($row);
Вывод:
array 'id' => string '1' (length=1) 'createdBy' => string '1' (length=1) 'catName' => string 'APTITUDE' (length=8) 'description' => string 'APTITUDE' (length=8) 'status' => string '1' (length=1)
mysql_fetch_object
$row=mysql_fetch_object($query); var_dump($row);
Вывод:
object(stdClass)[2] public 'id' => string '1' (length=1) public 'createdBy' => string '1' (length=1) public 'catName' => string 'APTITUDE' (length=8) public 'description' => string 'APTITUDE' (length=8) public 'status' => string '1' (length=1)
Rest @Gaurang предоставил, как использовать выход для вашего кода и других действий.
mysql_fetch_row возвращает перечисляемый массив, поэтому индекс – это числа. mysql_fetch_array возвращает ассоциативный массив (и по умолчанию – номера слияния для индекса), поэтому mysql_fetch_array возвращает по умолчанию все данные, дублированные в одном массиве, один набор данных с использованием числа в качестве индекса и другого набора, все еще в одном массиве, с ассоциативным индексом (текстовые индексы).
mysql_fetch_row Пример:
Array(2) 0 => "foo" 1 => "bar"
mysql_fetch_array Пример (поведение по умолчанию):
Array(4) 0 => "foo" 1 => "bar" "user" => "foo" "name" => "bar"
Есть 3 функции. mysql_fetch_assoc mysql_fetch_row mysql_fetch_array (комбинация строк и ссылок)
Я бы порекомендовал _assoc или _row оптимизировать ваш код и сохранить его. Если вы захватываете один столбец, используйте строку $ row = mysql_fetch_row $ [0]
Как говорится в руководстве: mysql_fetch_array()
может возвращать ассоциативный массив в зависимости от значений по умолчанию и его второго параметра ( MYSQL_ASSOC
, MYSQL_NUM
или MYSQL_BOTH
).
Хотя mysql_fetch_row()
всегда возвращает индексированный массив.
mysql_fetch_array, как говорится в руководстве, может возвращать индекс int (position), ассоциативный массив или оба в соответствии с выбранным result_type.
с другой стороны, mysql_fetch_row всегда возвращает результирующий набор на основе целочисленного индекса.
Я лично рекомендую вам использовать mysql_fetch_array, передавая MYSQL_ASSOC в качестве второго параметра, поскольку всегда легче узнать, какое поле вы хотите извлечь
Fetch row возвращает числовой массив для текущей записи
http://www.php.net/manual/en/function.mysql-fetch-row.php
Массив Fetch будет по умолчанию возвращать полный массив id => key => value, но он также предлагает возможность выбора либо числового, либо ассоциативного возврата
Ответьте два из первой ссылки, которую вы указали, правильно. Комментарий сказал:
«Вместо этого оба возвращают все строки из таблицы. Разница между ними – результат возврата fetch_array в массиве-помощнике, а также числовой массив, и вы также можете указать, какой конкретный тип массива вы хотите, предоставив второй параметр функции, тогда как fetch_row возвращает результат в только числовой массив ".
… так что с помощью fetch_row вы не можете сделать что-то вроде
echo $result['name']; // can do this in fetch_array, not in fetch_row echo $result[0]; // can do this in fetch_array and fetch_row