Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Почему не работает запрос?
Форумы портала PHP.SU » » Вопросы новичков » Почему не работает запрос?

Страниц (1): [1]
 

1. maxapet - 04 Сентября, 2016 - 09:40:26 - перейти к сообщению
Подключение к MySQL проходит нормально, а запрос возвращает 0 записей. Этот же запрос через phpMyAdmin выбирает необходимые записи.
PHP:
скопировать код в буфер обмена
  1.  
  2.         $userId = "{15EE63AC-F070-4BEA-BB78-4E6687A1ED79}"
  3.         $widgetId = "{00000000-0000-0000-0000-000000000000}";
  4.  
  5.         $mysqli = new mysqli("localhost", "user", "userpwd", "mydb");
  6.         if($mysqli->connect_errno){
  7.                 echo "Ошибка при подключении к БД. Код ошибки: ".$mysqli->connect_errno." Описание ошибки: ".$mysqli->connect_error;
  8.                 exit;
  9.         }
  10.        
  11.         $query = "SELECT * FROM emails WHERE CustomerId = '{$userId }' AND WidgetId = '{$widgetId}'";
  12.         $result = $mysqli->query($query)
  13.                 or die("Ошибка при загрузке настроек пользователя. Описание ошибки: " . $mysqli->error);
  14.         echo 'Выбрано строк: ' . $mysqli->num_rows;
  15.  

В чём может быть дело?
2. Sail - 04 Сентября, 2016 - 12:07:25 - перейти к сообщению
maxapet пишет:
Этот же запрос через phpMyAdmin выбирает необходимые записи

echo $query;
И сравнивайте с тем, что ручками выполняете.
3. maxapet - 04 Сентября, 2016 - 12:14:01 - перейти к сообщению
Я так и сделал. Подставил запрос в phpMyAdmin, и он отработал нормально.
4. Fart - 04 Сентября, 2016 - 13:34:10 - перейти к сообщению
'{$userId }'

для чего вообще фигурные скобки и нужны ли они повторно?
данные записаны в бд такого вида?
{{...}}
или
{...}
и пробел разве нужен при поиске id?
5. maxapet - 04 Сентября, 2016 - 13:51:10 - перейти к сообщению
Внешние фигурные скобки нужны, чтобы вставить значение переменной в строку, в внутренние - в таком виде guid генерится. В БД guid хранится с фигурными скобками.
А про пробел я не понял - в каком месте он лишний?
6. OrmaJever - 04 Сентября, 2016 - 14:05:23 - перейти к сообщению
maxapet пишет:
а запрос возвращает 0 записей

maxapet пишет:
В чём может быть дело?

Побуду капитаном очевидностью, причина может быть одна - в таблице нет записей удовлетворяющих данное условие.
7. maxapet - 04 Сентября, 2016 - 17:20:34 - перейти к сообщению
OrmaJever пишет:
Побуду капитаном очевидностью, причина может быть одна - в таблице нет записей удовлетворяющих данное условие.

Я ведь написал: один и тот же запрос. Я вывожу строку запроса через echo, копирую строку запроса, и вставляю её в phpMyAdmin. В phphMyAdmin запрос возвращает строки, со страницы сайта - нет.
8. Fart - 04 Сентября, 2016 - 18:14:18 - перейти к сообщению
Покажи строчку запроса mysql после вывода результата введенного в phpmyadmin
(Добавление)
А пробел существует и он учитывается. в примере:
твоем


А должен


(Добавление)
Несмотря на то, что пробела у это нет

PHP:
скопировать код в буфер обмена
  1.  
  2. '{$widgetId}'
  3.  


Если пробел не причем и у тебя есть согласно примеру данные, значит по любому вывод нулевой в запросе и записей нет
9. maxapet - 05 Сентября, 2016 - 01:57:51 - перейти к сообщению
За пробел спасибо, увидел. Убрал, но не помогло.
Fart пишет:
Покажи строчку запроса mysql после вывода результата введенного в phpmyadmin

Вот запрос, выведенный командой echo:
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT * FROM emails WHERE CustomerId = '{15EE63AC-F070-4BEA-BB78-4E6687A1ED79}' AND WidgetId = '{00000000-0000-0000-0000-000000000000}'

А вот так выглядит запрос после выполнения в phpMyAdmin
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT *
  2. FROM emails
  3. WHERE CustomerId =  '{15EE63AC-F070-4BEA-BB78-4E6687A1ED79}'
  4. AND WidgetId =  '{00000000-0000-0000-0000-000000000000}'


Записи есть точно, я специально две добавил. И запрос через phpMyAdmin их выбирает.
Но строка
PHP:
скопировать код в буфер обмена
  1. echo 'Выбрано строк: ' . $mysqli->num_rows;
возвращает Выбрано строк: Т.е.получается, что $mysqli->num_rows содержит пустое значение.
(Добавление)
Fart пишет:
Покажи строчку запроса mysql после вывода результата введенного в phpmyadmin
(Добавление)
А пробел существует и он учитывается. в примере:
твоем


А должен

PHP:
скопировать код в буфер обмена
  1.  
  2. '{$userId}'
  3.  

(Добавление)
Несмотря на то, что пробела у это нет

PHP:
скопировать код в буфер обмена
  1.  
  2. '{$widgetId}'
  3.  


Если пробел не причем и у тебя есть согласно примеру данные, значит по любому вывод нулевой в запросе и записей нет
Попробовал такой запрос: SHOW TABLES - в phpMyAdmin отработал нормально, а со страницы сайта опять ничего не вернул.
10. Sail - 05 Сентября, 2016 - 09:20:36 - перейти к сообщению
maxapet пишет:
Т.е.получается, что $mysqli->num_rows содержит пустое значение

А какое значение содержит $mysqli->affected_rows?
(Добавление)
Ну, или $result->num_rows?
11. Мелкий - 05 Сентября, 2016 - 11:34:40 - перейти к сообщению
maxapet пишет:
$mysqli = new mysqli("localhost", "user", "userpwd", "mydb");

maxapet пишет:
echo 'Выбрано строк: ' . $mysqli->num_rows;

http://php.net/manual/en/class.mysqli.php
Где вы вообще нашли у объекта класса mysqli свойство num_rows?

Проверьте свой error_reporting. И display_errors заодно. Здесь E_NOTICE, который вы, судя по всему, не видите. А неизвестная переменная или свойство объекта - кидает E_NOTICE и представляется NULL, NULL после приведения к строке - пустая строка ''.
12. maxapet - 06 Сентября, 2016 - 17:26:04 - перейти к сообщению
Sail пишет:
maxapet пишет:
Т.е.получается, что $mysqli->num_rows содержит пустое значение

А какое значение содержит $mysqli->affected_rows?
(Добавление)
Ну, или $result->num_rows?

Спасибо, действительно, я не тот параметр проверял. $mysqli->affected_rows показывает, что выборка не пустая.
(Добавление)
Мелкий пишет:
maxapet пишет:
$mysqli = new mysqli("localhost", "user", "userpwd", "mydb");

maxapet пишет:
echo 'Выбрано строк: ' . $mysqli->num_rows;

http://php.net/manual/en/class.mysqli.php
Где вы вообще нашли у объекта класса mysqli свойство num_rows?

Проверьте свой error_reporting. И display_errors заодно. Здесь E_NOTICE, который вы, судя по всему, не видите. А неизвестная переменная или свойство объекта - кидает E_NOTICE и представляется NULL, NULL после приведения к строке - пустая строка ''.

Спасибо, действительно, у меня "смещались в кучу кони, люди...". Я смешал функциональный и объектно-ориентированный подходы. Если использовать $mysqli->affected_rows, то всё работает.

 

Powered by ExBB FM 1.0 RC1