почему count возвращает 22 вместо 11?

#php

#php

Вопрос:

Это мой php-скрипт

 $result = mysql_query("SELECT * FROM photos WHERE perID=2");
$row = mysql_fetch_array($result);
$a = count($row);                     // or sizeof($row)
echo $a;       //outputs 22 but i expect it to be 11 but why does it output 22 ?
  

Это данные в mysql.

 perID   one    two   three   four    five    six    sev    eit   nine  ten
  2    1.jpg  2.jpg  3.jpg   4.jpg   5.jpg  6.jpg  7.jpg  8.jpg  9.jpg 10.jpg
  

Я ожидаю, что это будет 11, но, на удивление, это 22. Кто-нибудь может объяснить мне, почему? Включает ли он также ‘one’ ‘two’ (имена столбцов) в функцию count? потому что это было бы 22, хотя бы в том случае, если оно включает их.

Но он не должен включать в себя часть столбца таблицы, поскольку они являются заголовками, верно? пожалуйста, помогите мне с этим, любая помощь будет высоко оценена

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

Комментарии:

1. Спасибо за все ваши ответы, как их решить? как бы я получил 11, если бы я разделил его на 2, а?

2. Есть ли какой-нибудь способ получить 11 вместо 22? пожалуйста, дайте мне знать, что

3. Попробуйте var_dump . Вся информация находится прямо там , вы должны быть в состоянии отлаживать подобные вещи.

4. Спасибо @meagar за ваше предложение var_dump

Ответ №1:

mysql_fetch_array() по умолчанию возвращает объединенную ассоциативную И индексированную структуру массива.

 SELECT a,b,c FROM table
  

создаст массив строк

 $row = array(0 => 'value of a', 'a' => 'value of a', 1 => 'value of b', etc...);
  

Вы можете заставить его выполнять одно или другое, указав необязательный параметр fetch_mode:

 $row = mysql_fetch_array($result, MYSQL_BOTH); // default mode
$row = mysql_fetch_array($result, MYSQL_ASSOC); // same as mysql_fetch_assoc: associative array
$row = mysql_fetch_array($result, MYSQL_NUM); // same as mysql_fetch_row: indexed array
  

Ответ №2:

mysql_fetch_array возвращает 2 столбца на столбец.

Например:

 array(
    [0] => '1.jpg',
    ['one'] => '1.jpg'
    etc..
  

если вы это сделаете mysql_query($query,MYSQL_ASSOC) , вы получите ['one'] only .

Проверьте эту документацию: http://nl3.php.net/manual/en/function.mysql-fetch-array.php

Ответ №3:

Если вы заглянете в документацию mysql_fetch_array , вы увидите второй параметр:

 $result_type = MYSQL_BOTH
  

Это означает, что функция возвращает объединенные массивы с ассоциативными ключами и цифровыми ключами.

Итак, вы удвоили данные.

Вы можете избежать этого с помощью:

 $row = mysql_fetch_array($result, MYSQL_ASSOC);
  

или просто:

 $row = mysql_fetch_assoc($result);
  

Ответ №4:

волшебная ссылка: http://php.net/mysql_fetch_array

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

Комментарии:

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

2. Я вообще не вижу смысла иметь такую таблицу. почему вы хотите сохранить имена изображений? вы не можете прочитать их из каталога?

3. @col: могут быть загружены изображения с метаданными в БД и файл на диске.

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

5. ну, для некоторых сложных случаев — да, но хранить только эти числа 1,2,3 … для меня не имеет смысла.

Ответ №5:

Если вы используете mysql_fetch_assoc() , у вас будет только $row['one'] и не более $row[1] .