#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]
.