2011-03-08 3 views
1

используя mysql_fetch_array() для простого query-PHP mysql_fetch_array терпит неудачу, если имя_поля 0

SELECT id, name, roll FROM student 

I Get->

Array (
    [0] => 1 
    [id] => 1 
    [1] => sam 
    [name] => sam 
    [2] => 5 
    [roll] => 5 
) 

Но, если я заменю рулон с 0->

SELECT id, name, 0 FROM student 

Отсылает->

Array (
    [0] => 0 
    [id] => 1 
    [1] => sam 
    [name] => sam 
    [2] => 0 
) 

'id' указывает '0'. В то время как запрос хорошо работает в mysql.

Это ошибка mysql_fetch_array?

+0

Итак, если я помещаю любое число в качестве поля - он не должен работать должным образом. –

+1

Почему бы не использовать mysql_fetch_row или использовать параметр MYSQL_NUM в качестве второго параметра? –

ответ

2

Это не ошибка. Значение массива с ключом как 0 перезаписывается.

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

[0] => 1  // for id 
[id] => 1 

[1] => sam // for name 
[name] => sam 

[0] => 0  // for 0 .. THIS WILL OVERWRITE. 

Самый простой способ исправить это, чтобы обеспечить псевдоним столбца как:

SELECT id, name, 0 AS FOO FROM student 
0

Вы должны использовать mysql_fetch_assoc вместо этого.

0

Другим решением является изменить запрос:

SELECT id, name, 0 AS zero FROM student 
2

mysql_fetch_array принимает два аргумента. Вы сигнализируете со вторым, как вы хотите получить свои результаты.

MYSQL_ASSOC даст вам ассоциативный массив с именами полей (или даже 0, если вы решите использовать его в качестве имени поля). Вы получите:

Array ([id] => 1 [name] => sam [roll] => 5) 

MYSQL_NUM даст получившиеся строки индексируются с номерами, в том порядке, который Вы задали для них. Вы получите:

Array ([0] => 1 [1] => sam [2] => 5) 

MYSQL_BOTH по умолчанию, он будет заполнить ваш массив в обоих направлениях и может усложнить вещи, как это.

Смежные вопросы