Как мне остановить MySQL от дублирования записи каждого столбца в возвращаемых массивах? - PullRequest
1 голос
/ 14 сентября 2010

Мои запросы MySQL возвращают массивы с повторяющимися записями: пронумерованные ключи и маркированные ключи с одинаковыми данными внутри.Это может быть стандартным, но это кажется пустой тратой, которая может вызвать проблемы, если я печатаю значения.Я имею в виду, не большая проблема, очевидно.Но мне просто любопытно, смогу ли я это остановить.Это кажется ненужным.Например:

Array(
    [0] => "Ted",
    [first_name] => "Ted",
    [1] => "Schmidlap",
    [last_name] => "Schmidlap"
)

И т. Д.

Я довольно новичок в этом, так что это может быть простой вопрос, но Googling, похоже, не имеет никакогоответы для меня.Кто-нибудь знает причину, по которой это происходит?Сейчас я использую PDO PHP, но раньше я делал это прямо через функции MySQL, и то же самое происходило, поэтому я предполагаю, что это побочный продукт взаимодействия MySQL.

Я могу перебирать и сбрасывать числовые значенияте, потому что они мне не нужны, но сейчас они на самом деле не мешают, так что это просто дополнительный шаг.Тем не менее, есть ли способ просто не получить их в первую очередь?

Ответы [ 4 ]

2 голосов
/ 14 сентября 2010

Предположительно, это происходит после использования mysql_fetch_array (или аналогичного).

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

т.е. mysql_fetch_array($result_set, MYSQL_ASSOC|MYSQL_NUM|MYSQL_BOTH)

1 голос
/ 14 сентября 2010

Ваша проблема связана с функцией mysql_fetch_array.

Если вы хотите только цифры, используйте:

$row = mysql_fetch_array($result, MYSQL_NUM)

Если вам нужны только текстовые индексы, используйте:

$row = mysql_fetch_array($result, MYSQL_ASSOC)

Я обычно использую MySQLi , но для PDO вы можете найти больше информации здесь: http://us3.php.net/manual/en/pdostatement.fetch.php

Что означает, что вы должны использовать это для текстовых индексов:

$row = $statement->fetch(PDO::FETCH_ASSOC);

И это для числовых индексов:

$row = $statement->fetch(PDO::FETCH_NUM);
1 голос
/ 14 сентября 2010

Это зависит от функции, которую вы используете.Некоторые функции возвращают оба типа, другие возвращают только один из них.

Если вы используете PDOStatement->fetch, обратите внимание на необязательный аргумент $ fetch_style , который требуется.

0 голосов
/ 14 сентября 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...