mysql_fetch_array — Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный


Mysql_fetch_array возвращает повторяющиеся данные

каждый раз, когда я запускаю mysql_fetch_array, массив возвращается с повторяющимися значениями , например.

но мне нужны только отдельные результаты в массиве, я попытался использовать

Но это не имеет значения.

Это назначенная функциональность mysql_fetch_array() . Если вы хотите не иметь «дубликатов» и просто иметь ассоциативный массив, используйте mysql_fetch_assoc() .

mysql_fetch_array возвращает результат, возвращаемый как ответ на выполнение запроса как как ассоциативный, так и числовой массивы. Для возврата набора результатов в качестве ассоциативного массива вам необходимо использовать функцию mysql_fetch_assoc. Для возврата результатов в виде числового массива вам необходимо использовать функцию mysql_fetch_row.

Используйте mysql_fetch_assoc() для ассоциативного массива или mysql_fetch_row для числового массива

Возвращает массив строк, соответствующий выбранной строке, или FALSE, если строк больше нет. Тип возвращаемого массива зависит о том, как определяется result_type. Используя MYSQL_BOTH (по умолчанию), вы будете получить массив с ассоциативными и числовыми индексами.. MYSQL_ASSOC, вы получаете только ассоциативные индексы (как mysql_fetch_assoc() работает), используя MYSQL_NUM, вы получаете только номера индексов (как mysql_fetch_row() работает).

Другими словами, поскольку MYSQL_BOTH является значением по умолчанию, вы получаете оба значения. Вместо этого вы можете указать MYSQL_ASSOC или MYSQL_NUM, чтобы получить ассоциативный массив или числовой массив. Вы также можете использовать mysql_fetch_assoc(), который будет возвращать только ассоциативный массив.

mysql_fetch_array() возвращает массив, содержащий как ассоциативные ключи (имена полей, заданные запросами), так и целочисленный ключ позиции (т.е. 0 — первое поле, 1, второе и т.д.). Это удобно для доступа к данным с помощью любого метода.

если вам нужны только именованные ключи, вы должны использовать mysql_fetch_assoc() или еще лучше, используйте функции mysqli, поскольку все, кто здесь, будут вас замаскировать для использования старых функций mysql_ *.

mysqli_fetch_array($result, MYSQL_ASSOC) это работало для меня, как было предложено выше для mysql_fetch_assoc , в PHP5.5 он устарел сейчас.

mysql_fetch_array возвращает повторяющиеся данные

каждый раз, когда я запускаю mysql_fetch_array, массив возвращается с повторяющимися значениями, например

но мне нужны только отдельные результаты в массиве, я попытался использовать

Но это не имеет значения.

Это назначенная функция mysql_fetch_array() . Если вы хотите не иметь «дубликатов» и просто иметь ассоциативный массив, используйте mysql_fetch_assoc() .

mysql_fetch_array возвращает возвращаемый результат как ответ на выполнение запроса как как ассоциативный, так и числовой массивы. Для возврата набора результатов в качестве ассоциативного массива вам необходимо использовать функцию mysql_fetch_assoc. Для возврата результатов в виде числового массива вам необходимо использовать функцию mysql_fetch_row.

Используйте mysql_fetch_assoc () для ассоциативного массива или mysql_fetch_row для числового массива

Возвращает массив строк, соответствующий выбранной строке, или FALSE, если больше строк нет. Тип возвращаемого массива зависит от того, как определяется result_type. Используя MYSQL_BOTH (по умолчанию), вы получите массив с ассоциативными и числовыми индексами. Используя MYSQL_ASSOC, вы получаете только ассоциативные индексы (как работает mysql_fetch_assoc ()), используя MYSQL_NUM, вы получаете только числовые индексы (как работает mysql_fetch_row ()).

Другими словами, поскольку MYSQL_BOTH является значением по умолчанию, вы получаете оба значения. Вместо этого вы можете указать MYSQL_ASSOC или MYSQL_NUM, чтобы получить ассоциативный массив или числовой массив. Вы также можете использовать mysql_fetch_assoc (), который будет возвращать только ассоциативный массив.

mysql_fetch_array() возвращает массив, содержащий как ассоциативные ключи (имена полей, заданные запросами), так и целочисленную позицию (т.е. 0 – первое поле, 1 – второе и т. д.). Это удобно для доступа к данным с помощью любого метода.

если вам нужны только именованные ключи, вы должны использовать mysql_fetch_assoc() или еще лучше, используйте функции mysqli, так как все, кто здесь, будут замаскировать вас за использование старых функций mysql_ *.

mysqli_fetch_array($result, MYSQL_ASSOC) это сработало для меня, как было предложено выше для mysql_fetch_assoc , в PHP5.5 оно устарело.

Mysql_fetch_array — Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.

(PHP 3, PHP 4 , PHP 5)

mysql_fetch_array — Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.

Описание array mysql_fetch_array ( resource result [, int result_type] )

Возвращает массив с обработанным рядом результата запроса, или FALSE , если рядов больше нет.

Если несколько колонок в результате будут иметь одинаковые названия, последняя колонка будет возвращена. Чтобы получить доступ к первым, используйте численные индексы массива или алиасы в запросе. В случае алиасов используйте именно их — вы не сможете использовать настоящие имена колонок, как например не сможете использовать ‘field’ в нижеописанном примере.

Пример 1. Запрос с дублирующимися именами колонок

select table1.field as foo, table2.field as bar from table1, table2

Второй опциональный аргумент result_type в функции mysql_fetch_array() — константа и может принимать следующие значения: MYSQL_ASSOC, MYSQL_NUM и MYSQL_BOTH. Эта возможность добавлена в PHP 3.0.7. Значением по умолчанию является: MYSQL_BOTH.

Используя MYSQL_BOTH, вы получите массив, состоящий как из ассоциативных индексов, так и из численных. MYSQL_ASSOC вернёт только ассоциативные соответствия (аналогично функции mysql_fetch_assoc() и MYSQL_NUM только численные (аналогично функции mysql_fetch_row() ).

Замечание: Имена полей, возвращаемые этой функцией, регистро-зависимы .

Пример 2. mysql_fetch_array() с MYSQL_NUM

( «localhost» , «mysql_user» , «mysql_password» ) or
die( «Could not connect: » . mysql_error ());
mysql_select_db ( «mydb» );

$result = mysql_query ( «SELECT id, name FROM mytable» );

while ( $row = mysql_fetch_array ( $result , MYSQL_NUM )) <
printf ( «ID: %s Name: %s» , $row [ 0 ], $row [ 1 ]);
>

Пример 3. mysql_fetch_array() с MYSQL_ASSOC

( «localhost» , «mysql_user» , «mysql_password» ) or
die( «Could not connect: » . mysql_error ());
mysql_select_db ( «mydb» );

$result = mysql_query ( «SELECT id, name FROM mytable» );

while ( $row = mysql_fetch_array ( $result , MYSQL_ASSOC )) <
printf ( «ID: %s Name: %s» , $row [ «id» ], $row [ «name» ]);
>

Пример 4. mysql_fetch_array() с MYSQL_BOTH

( «localhost» , «mysql_user» , «mysql_password» ) or
die( «Could not connect: » . mysql_error ());
mysql_select_db ( «mydb» );

$result = mysql_query ( «SELECT id, name FROM mytable» );

while ( $row = mysql_fetch_array ( $result , MYSQL_BOTH )) <
printf ( «ID: %s Name: %s» , $row [ 0 ], $row [ «name» ]);
>

Regarding duplicated field names in queries, I wanted some way to retrieve rows without having to use alias, so I wrote this class that returns rows as 2d-arrays

= $drow [ ‘table’ ][ ‘column’ ];
?>

Here is the code:

class mysql_resultset
<
var $results , $map ;

function mysql_resultset ( $results )
<
$this -> results = $results ;
$this -> map = array();

$index = 0 ;
while ( $column = mysql_fetch_field ( $results ))
<
$this -> map [ $index ++] = array( $column -> table , $column -> name );
>
>

function fetch ()
<
if ( $row = mysql_fetch_row ( $this -> results ))
<
$drow = array();

foreach ( $row as $index => $field )
<
list( $table , $column ) = $this -> map [ $index ];
$drow [ $table ][ $column ] = $row [ $index ];
>

return $drow ;
>
else
return false ;
>
>
?>

The class is initialized with a mysql_query result:

= new mysql_resultset ( mysql_query ( $sql ));
?>

The constructor builds an array that maps each field index to a ($table, $column) array so we can use mysql_fetch_row and access field values by index in the fetch() method. This method then uses the map to build up the 2d-array.

=
«select orders.*, clients.*, productos.* » .
«from orders, clients, products » .
«where join conditions» ;


$resultset = new mysql_resultset ( mysql_query ( $sql ));

while ( $drow = $resultset -> fetch ())
<
echo ‘No.: ‘ . $drow [ ‘orders’ ][ ‘number’ ]. ‘
‘ ;
echo ‘Client: ‘ . $drow [ ‘clients’ ][ ‘name’ ]. ‘
‘ ;
echo ‘Product: ‘ . $drow [ ‘products’ ][ ‘name’ ]. ‘
‘ ;
>
?>

I hope others find this useful as it has been to me.

I wrote some utility functions to improve usability and readability, and use them everywhere in my code. I suppose they can help.

function mysql_fetch_all($query,$MySQL=NULL) <
$r=@mysql_query($query,$MySQL);
if($err=mysql_errno($MySQL))return $err;
if(@mysql_num_rows($r))
while($row=mysql_fetch_array($r))$result[]=$row;
return $result;
>
function mysql_fetch_one($query,$MySQL=NULL) <
$r=@mysql_query($query,$MySQL);
if($err=mysql_errno($MySQL))return $err;
if(@mysql_num_rows($r))
return mysql_fetch_array($r);
>

Example use:
if(is_array($rows=mysql_fetch_all(«select * from sometable»,$MySQL))) <
//do something
>else <
if(!is_null($rows)) die(«Query failed!»);
>

One of the most common mistakes that people make with this function, when using it multiple times in one script, is that they forget to use the mysql_data_seek() function to reset the internal data pointer.

When iterating through an array of MySQL results, e.g.

while ( $line = mysql_fetch_array ( $result , MYSQL_ASSOC )) <
foreach ( $line as $col_value ) <
echo $col_value . ‘
‘ ;
>
>
?>

the internal data pointer for the array is advanced, incrementally, until there are no more elements left in the array. So, basically, if you copy/pasted the above code into a script TWICE, the second copy would not create any output. The reason is because the data pointer has been advanced to the end of the $line array and returned FALSE upon doing so.

If, for some reason, you wanted to interate through the array a second time, perhaps grabbing a different piece of data from the same result set, you would have to make sure you call

( $result , 0 );
?>

This function resets the pointer and you can re-iterate through the $line array, again!

for the problem with fields containing null values in an associated array, feel free to use this function. i’ve got no more problems with it, just drop it in your script:

/*
* mysql_fetch_array_nullsafe
*
*
* get a result row as an enumerated and associated array
* ! nullsafe !
*
* parameter: $result
* $result: valid db result id
*
* returns: array | false (mysql:if there are any more rows)
*
*/
function mysql_fetch_array_nullsafe($result) <
$ret=array();

$num = mysql_num_fields($result);
if ($num==0) return $ret;

$fval = mysql_fetch_row ($result);
if ($fval === false) return false;

An example with mysql_fetch_array():

$result = mysql_query(«SELECT name FROM table WHERE > $array = mysql_fetch_array($result);

array ([0] => «John», [‘name’] => «John»)

Then you can access to the results:

echo «The name is » . $array[0];
// or
echo «The name is » . $array[‘name’];

But the array is not referential. $array[0] is not a reference to $array[‘name’] or $array[‘name’] to $array[0], they are not relationed between. Because of that, the system will use excesive memory. With large columns, try to use mysql_fetch_assoc() or mysql_fetch_row() only.

I did find ‘jb at stormvision’s’ code useful above, but instead of the number of rows you need the number of fields; otherwise you get an error.

So, it should read like the following:

$result=mysql_query(«select * from mydata order by ‘id'»)or die(‘died’);
$num_fields = mysql_num_fields($result);
$j=0;
$x=1;
while($row=mysql_fetch_array($result)) <
for($j=0;$j

Just another workaround for columns with duplicate names.

Modify your SQL to use the AS keyword.

Instead of:
$sql = «SELECT t1.cA, t2.cA FROM t1, t2 WHERE t1.cA = t2.cA»;

Try:
$sql = «SELECT t1.cA AS foo1, t2.cA AS foo2 FROM t1, t2 WHERE t1.cA = t2.cA»;

Then you can reference the results by name in the array:
$row[foo1], $row[foo2]

If you think MySQL (or other) database
handling is difficult and requires lot’s of
code, I recommend that you try http://titaniclinux.net/daogen/

DaoGen is a program source code generator
that supports PHP and Java. It makes database
programming quick and easy. Generated sources
are released under GPL.

Benchmark on a table with 38567 rows:

mysql_fetch_array
MYSQL_BOTH: 6.01940000057 secs
MYSQL_NUM: 3.22173595428 secs
MYSQL_ASSOC: 3.92950594425 secs

mysql_fetch_row: 2.35096800327 secs
mysql_fetch_assoc: 2.92349803448 secs

As you can see, it’s twice as effecient to fetch either an array or a hash, rather than getting both. it’s even faster to use fetch_row rather than passing fetch_array MYSQL_NUM, or fetch_assoc rather than fetch_array MYSQL_ASSOC. Don’t fetch BOTH unless you really need them, and most of the time you don’t.

Here is a suggestion to workaround the problem of NULL values:

// get associative array, with NULL values set
$record = mysql_fetch_array($queryID,MYSQL_ASSOC);

// set number indices
if(is_array($record))
<
$i = 0;
foreach($record as $element)
$record[$i++] = $element;
>

This way you can access $result array as usual, having NULL fields set.

If you perform a SELECT query which returns different columns with duplicate names, like this:

———
$sql_statement = «SELECT tbl1.colA, tbl2.colA FROM tbl1 LEFT JOIN tbl2 ON tbl1.colC = tbl2.colC»;

$result = mysql_query($sql_statement, $handle);

$row[0] is equivalent to $row[«colA»]

$row[1] is not equivalent to $row[«colA»].

Moral of the story: You must use the numerical index on the result row arrays if column names are not unique, even if they come from different tables within a JOIN. This would render mysql_fetch_assoc() useless.

[Ed. note — or you could do the usual ‘select tbl1.colA as somename, tbl2.colA as someothername. . .’ which would obviate the problem. — Torben]

Hi to enumerate a result set with out worrying about null values just use below code.

while($myrow = mysql_fetch_row($result))
<
print »

«;
for($x=0; $x

I never had so much trouble with null fields but it’s to my understanding that extract only works as expected when using an associative array only, which is the case with mysql_fetch_assoc() as used in the previous note.

However a mysql_fetch_array will return field values with both the numerical and associative keys, the numerical ones being those extract() can’t handle very well.
You can prevent that by calling mysql_fetch_array($result,MYSQL_ASSOC) which will return the same result as mysql_fetch_assoc and is extract() friendly.

actually with php 4.0.5 mysql_fetch_assoc DOES set NULL fields, so you can safely overwrite existing values with

$result = mysql_query($some_query);
while($row=mysql_fetch_assoc($result)) <
extract($row);
// .
>

extract will do the job of walking through the associative array and setting the variables $$key to $value for you even when $value is NULL

mysql_fetch_row also consistently retrieves NULL values with the correct indices

The code above is great to write the variable’s one time and refer to them when you need to then loop through the next item.

In a controled environment, I used this code in a for loop to create columns. You still need to put it in a loop for multiple items.

$ary = mysql_fetch_assoc($query_variable);
if(is_array($ary)) <
while (list($key,$val) = each($ary)) <
$$key = $val;
>
> else <
break 1;
>

I continuely got errors without the else break clause. This breaks me out of my for loop. Hope it helps.


An easier way to accomplish what Jean.Francois did with his code is to use the mysql_fetch_assoc() function to retrieve the associative array and feed this into a while loop:

. . .
$q_result = mysql_query ( $select_stmt );
while ( $ary = mysql_fetch_assoc ( $q_result )) <
while (list( $key , $val ) = each ( $ary )) <
$ $key = $val ;
>
# You can now use your column names
# as variables.
>
. . .
?>

The above approach is suggested by Rasmus Lerdorf in the PHP Pocket Reference. It eliminates a query to the database to retrieve column names (SHOW COLUMNS) and makes prettier code, IMO.

I might add that the (mis)behavior of mysql_fetch_array() in not producing column name hash elements had my stymied for a while. I find it more intuitive to use column names rather than indices to access field data. Frankly, I don’t see the rationale for not producing column name hash elements when the value is NULL. Luckily, mysql_fetch_assoc() exists, making my life easier and my code more readily understood.

I’m running php 4.04pl1 — As mentioned in the previous notes, when using the default result_type parameter MYSQL_BOTH, any array element that has a NULL value can only be accessed through the numeric indicies.

If I use the MYSQL_ASSOC result_type, then all of the array elements, including those with NULL values, can be accessed by the name indicies.

If NULL fields are not returned then the hash will not be set. You can just check it like so:

// FirstName is NULL
.

I also found that if the first record in my query contained NULL values in the cooresponding cells, «nothing» is saved to the variables being used in the loop. That is, the NULL value is stored in the variable used to present the column’s value. If the first record contains NULL then (as mentioned in a previous post) as the loop continues, the variables associated with the next row will also be set to NULL. So, if your Select statement returns 79 records and the first record contains all NULL values, You will be presented with a «blank» table when you actually expect 79 records posted.

hmmm. i think i represented that correcty.

So how do i test for NULL values in this While loop —

while ($row = mysql_fetch_array($sql_result)) <
$first_name = $row[«FirstName»];
$last_name = $row[«LastName»];
$home_phone = $row[«HomePhone»];
$email = $row[«EmailName»];

The behavior Sasha describes becomes problematic if your mysql_fetch_array() is followed by extract() in a loop that writes out results from a query. If a field value is null, then extract() won’t recreate the corresponding variable, and the variable will remain set to the value from the previous row. This gave some unexpected results until I figured out what was going on.

I’ll post a workaround here if I can figure out a good one.

Arlo Leach
www.typea.net

Note that mysql_fetch_* will not set any columns whose value is NULL. so, if you have a row with 10 columns, and 5 of them are NULL, then mysql_fetch_row/array will return 5-element
array (mysql_fetch_array being a special case)!

This is very misleading if you expect the number
of elements in the array returned by mysql_fetch_row to always match the number of columns in your table.

(Ed. Note: many people will vehemently argue that using NULLs in the first place is a bad idea.)

mysql_fetch_array

mysql_fetch_array — извлекает результирующий ряд как ассоциативный массив, числовой массив или и тот, и другой.

Описание

array mysql_fetch_array (resource result [, int result_type])

Возвращает массив, соответствующий извлечённому ряду, или FALSE, если рядов больше нет.

mysql_fetch_array() это расширенная версия mysql_fetch_row(). Помимо сохранения данных в числовых индексах результирующего массива, она также хранит данные в ассоциативных индексах, используя в качестве ключей имена полей.

Если два или более столбцов результата имеют одинаковые имена полей, последний столбец имеет приоритет. Для доступа к другим столбцам с тем же именем вы обязаны использовать числовой индекс столбца или создать для столбца псевдоним. Для столбцов с псевдонимами вы не можете получить доступ к их содержимому через оригинальное имя столбца (в нашем примере, используя 'field').

Пример 1. Запрос с дублирующими именами полей

Важно подчеркнуть, что mysql_fetch_array() работает ненамного медленнее, чем mysql_fetch_row(), но предоставляет важное дополнительное значение.

Необязательный второй аргумент result_type в mysql_fetch_array() является константой и может иметь следующие значения: MYSQL_ASSOC, MYSQL_NUM и MYSQL_BOTH. Это было добавлено в PHP 3.0.7. MYSQL_BOTH это значение по умолчанию данного аргумента.

Используя MYSQL_BOTH, вы получите массив с ассоциативными и числовыми индексами. Используя MYSQL_ASSOC, вы получите только ассоциативные индексы (как при работе mysql_fetch_assoc()). Используя MYSQL_NUM, вы получите только числовые индексы (как при работе mysql_fetch_row()).

Как получить ассоциативный массив в результатах MySQL?

но то, что я хочу, похоже на

Используя MYSQL_BOTH (по умолчанию), вы получите массив с обоими ассоциативные и числовые индексы. Используя MYSQL_ASSOC, вы получаете только ассоциативные индексы (как работает mysql_fetch_assoc()), используя MYSQL_NUM, вы получаете только числовые индексы (как работает mysql_fetch_row()).

Если вы не сообщите mysql_fetch_array о возврате ассоциативности, то он вернет как перечисленные, так и ассоциативные записи для каждого столбца

укажите MYSQL_ASSOC как второй аргумент для mysql_fetch_array, чтобы устранить эту проблему.

В долгосрочной перспективе я бы также рекомендовал отказаться от mysql и использовать mysqli или даже pdo

Как получить нужный массив из mySql таблицы?

Здравствуйте. Отправляя запрос в БД, получаю таблицу с данными, которую хотел бы перенести в массив. На данный момент имею такой скрипт:

Получаю массив вида:

А хотел бы получать массив такого вида:

То есть без лишних массивов. Чтобы в одном массиве, были другие массивы с пользователями.
Как изменить код, подскажите пожалуйста? Не могу додуматься.
Или может проще этот массив перебрать в новый массив?

mysql_fetch_array; Вывод из базы данных;

tempin

Новичок

Добрый день.
Имеется база данных, имеется sql запрос, находящийся в переменной $sql.
В результате работы должный выдаваться, к примеру, значения поля ID всех строк, отсортированных sql запросом.

Реализовывается это следующим кодом:
.
$result = mysql_query($sql);

while($myrow=mysql_fetch_array($result))
<
echo $myrow[‘id’];
echo «
«;
>

Вопросы:
1) По какому принципу работает цикл while в данном примере? В мануале: The meaning of a while statement is simple. It tells PHP to execute the nested statement(s) repeatedly, as long as the while expression evaluates to TRUE.
Код выполняется, пока условие верно. Но что есть условие? По идеи, вот оно:$myrow=mysql_fetch_array($result). Значение одной переменной присваивается другой, где здесь условие? a

Взаимодействие PHP и MySQL

Отображение данных, хранящихся в MySQL

Чтобы отобразить какие-то данные в браузере с помощью PHP , нужно сначала получить эти данные в виде переменных PHP . При работе с MySQL без посредника (такого, как PHP ) выборка данных производится с помощью команды SELECT языка SQL :

В предыдущей главе мы говорили, что любой запрос , в том числе и на выборку, можно отправить на сервер с помощью функции mysql_query() ; Там у нас стояла немного другая задача — получить данные из формы и отправить их с помощью запроса на вставку в базу данных. Результатом работы mysql_query() там могло быть только одно из выражений, TRUE или FALSE . Теперь же требуется отправить запрос на выбор всех полей, а результат отобразить в браузере. И здесь результат — это целая таблица значений, а точнее, указатель на эту таблицу. Так что нужны какие-то аналоги функции mysql_field_name() , только чтобы они извлекали из результата запроса не имя, а значение поля. Таких функций в PHP несколько. Наиболее популярные — mysql_result() и mysql_fetch_array() .

mysql_result() возвращает значение одной ячейки результата запроса. Аргумент field может быть порядковым номером поля в результате, именем поля или именем поля с именем таблицы через точку tablename. fieldname . Если для имени поля в запросе применялся алиас (‘select foo as bar from. ‘) , используйте его вместо реального имени поля.

Работая с большими результатами запросов, следует задействовать одну из функций, обрабатывающих сразу целый ряд результата (например, mysql_fetch_row() , mysql_fetch_array() и т.д.). Так как эти функции возвращают значение нескольких ячеек сразу, они НАМНОГО быстрее mysql_result() . Кроме того, нужно учесть, что указание численного смещения (номера поля) работает намного быстрее, чем указание колонки или колонки и таблицы через точку.

Вызовы функции mysql_result() не должны смешиваться с другими функциями, работающими с результатом запроса.

Эта функция обрабатывает ряд результата запроса, возвращая массив (ассоциативный, численный или оба) с обработанным рядом результата запроса, или FALSE , если рядов больше нет.

mysql_fetch_array() — это расширенная версия функции mysql_fetch_row() . Помимо хранения значений в массиве с численными индексами, функция возвращает значения в массиве с индексами по названию колонок.

Если несколько колонок в результате будут иметь одинаковые названия, будет возвращена последняя колонка. Чтобы получить доступ к первым, следует использовать численные индексы массива или алиасы в запросе. В случае алиасов именно их вы не сможете использовать в именах колонок, как, например, не сможете использовать «photo» в описанном ниже примере.

Важно заметить, что mysql_fetch_array() работает НЕ медленнее, чем mysql_fetch_row() , и предоставляет более удобный доступ к данным.


Второй опциональный аргумент result_type в функции mysql_fetch_array() является константой и может принимать следующие значения: MYSQL_ASSOC , MYSQL_NUM и MYSQL_BOTH . Эта возможность добавлена в PHP 3.0.7. Значением по умолчанию является: MYSQL_BOTH .

Используя MYSQL_BOTH , получим массив , состоящий как из ассоциативных индексов, так и из численных. MYSQL_ASSOC вернет только ассоциативные соответствия, а MYSQL_NUM — только численные.

Замечание: имена полей, возвращаемые этой функцией, регистрозависимы.

Теперь отобразим данные из Artifacts в виде таблицы в браузере:

Сделаем то же самое с помощью mysql_fetch_array() :

Заключение

В этой лекции мы решили две задачи: добавление данных в базу данных и их отображение в браузере с помощью языка PHP . Для этого мы рассмотрели ряд функций, которые позволяют отправлять SQL -запросы к базе данных и обрабатывать полученные ответы. Используя приведенную здесь технологию, можно решить целый ряд похожих задач, таких как задачи изменения и удаления данных, задачи манипулирования таблицами базы данных (т.е. их создание, изменение и удаление) и т.п. Все это типовые задачи, возникающие при разработке систем управления данными, и умение их решать, как и умение работать с базами данных в целом, очень важно для web-программиста.

Mysql_fetch_array — Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.

(PHP 3, PHP 4, PHP 5)

mysql_fetch_array — Обрабатывает ряд результата запроса, возвращая ассоциативный массив, численный массив или оба.

Описание array mysql_fetch_array ( resource result [, int result_type] )

Возвращает массив с обработанным рядом результата запроса, или FALSE , если рядов больше нет.

Если несколько колонок в результате будут иметь одинаковые названия, последняя колонка будет возвращена. Чтобы получить доступ к первым, используйте численные индексы массива или алиасы в запросе. В случае алиасов используйте именно их — вы не сможете использовать настоящие имена колонок, как например не сможете использовать ‘field’ в нижеописанном примере.

Пример 1. Запрос с дублирующимися именами колонок

select table1.field as foo, table2.field as bar from table1, table2

Второй опциональный аргумент result_type в функции mysql_fetch_array() — константа и может принимать следующие значения: MYSQL_ASSOC, MYSQL_NUM и MYSQL_BOTH. Эта возможность добавлена в PHP 3.0.7. Значением по умолчанию является: MYSQL_BOTH.

Используя MYSQL_BOTH, вы получите массив, состоящий как из ассоциативных индексов, так и из численных. MYSQL_ASSOC вернёт только ассоциативные соответствия (аналогично функции mysql_fetch_assoc() и MYSQL_NUM только численные (аналогично функции mysql_fetch_row() ).

Замечание: Имена полей, возвращаемые этой функцией, регистро-зависимы .

Пример 2. mysql_fetch_array() с MYSQL_NUM

( «localhost» , «mysql_user» , «mysql_password» ) or
die( «Could not connect: » . mysql_error ());
mysql_select_db ( «mydb» );

$result = mysql_query ( «SELECT id, name FROM mytable» );

while ( $row = mysql_fetch_array ( $result , MYSQL_NUM )) <
printf ( «ID: %s Name: %s» , $row [ 0 ], $row [ 1 ]);
>

mysql_free_result ( $result );
?>

Пример 3. mysql_fetch_array() с MYSQL_ASSOC

( «localhost» , «mysql_user» , «mysql_password» ) or
die( «Could not connect: » . mysql_error ());
mysql_select_db ( «mydb» );

$result = mysql_query ( «SELECT id, name FROM mytable» );

while ( $row = mysql_fetch_array ( $result , MYSQL_ASSOC )) <
printf ( «ID: %s Name: %s» , $row [ «id» ], $row [ «name» ]);
>

mysql_free_result ( $result );
?>

Пример 4. mysql_fetch_array() с MYSQL_BOTH

( «localhost» , «mysql_user» , «mysql_password» ) or
die( «Could not connect: » . mysql_error ());
mysql_select_db ( «mydb» );

$result = mysql_query ( «SELECT id, name FROM mytable» );

while ( $row = mysql_fetch_array ( $result , MYSQL_BOTH )) <
printf ( «ID: %s Name: %s» , $row [ 0 ], $row [ «name» ]);
>

Разница между mysql_fetch_array и mysql_fetch_row?

Это простой вопрос для пользователей PHP. Причина, по которой я не смог получить точную разницу между mysql_fetch_array() и mysql_fetch_row() в PHP, заключается в том, что я много работал с Java.

Прежде чем опубликовать этот вопрос здесь, я получил несколько ответов от Google, но обнаружил, что они несколько запутывают. Некоторые из ссылок, которые я нашел в Интернете, следующие.

Я не мог получить точную идею из приведенных выше ответов. Итак, какова же разница между ними?

Возвращает массив строк, соответствующий выбранной строке, или FALSE, если строк больше нет. Тип возвращаемого массива зависит от как определяется result_type. Используя MYSQL_BOTH (по умолчанию), вы получите массив с как ассоциативными, так и числовыми индексами. Используя MYSQL_ASSOC, вы получаете только ассоциативные индексы (как работает mysql_fetch_assoc()), [by], используя MYSQL_NUM, вы получаете только числовые индексы (как работает mysql_fetch_row()).

Возвращает числовой массив строк, соответствующий выбранному строка или 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

mysql_fetch_row()

Получить строку результата в виде числового массива

1 tobby tobby78 $2

mysql_fetch_object()

Получить строку результата как объект

1 tobby tobby78 $2

mysql_fetch_assoc()

Получить строку результатов как ассоциативный массив

1 tobby tobby78 $2

mysql_fetch_array()

Получить строку результатов как ассоциативный массив, числовой массив, а также он извлекается как ассоциативным, так и числовым массивом.

Илон Маск рекомендует:  Что такое код imagesise
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL