Вызов функции-члена при не объектной ошибке, когда sql-запрос возвращает 0

#php #sql #pdo

#php #sql #pdo

Вопрос:

У меня есть следующий запрос с использованием PDO php

 $STH = $DBH->query('
    SELECT COUNT(*) AS hits FROM table WHERE column = "' .$variable. '"
');
  

Таблица пуста, будет ли это как-то связано с ошибкой?
Имеет ли это какое-то отношение к hits равному 0?

Я выбираю данные из базы данных MSSQL.

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

1. Можете ли вы опубликовать свой полный соответствующий код? Где вы инициализируете $DBH объект класса ?

2. $DBH не является допустимым объектом для вызова query метода. Не имеет значения, возвращает запрос 0 или нет.

3. Хорошо, я решил это, я заменил все ' на " и наоборот. Я думаю, что это проблема sql. Dangit теперь я должен сделать это для всех подобных экземпляров. Я использовал ' , чтобы у меня могли быть входные данные, содержащие символ ' , но мне просто нужно найти другой способ сделать это 😉

Ответ №1:

Это просто означает, что $DBH не является объектом, поэтому он не подключен, и в результате вы получаете 0.

Вы должны сначала создать $DBH объект, а затем запустить query метод

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

1. У меня есть файл с именем ‘db_connect.php ‘ к которому я привязываю все свои страницы. Объект $ DBH был классифицирован там. Я знаю, что это работает, потому что другие sql-запросы и подготовленные операторы работают нормально.

2. Попробуйте добавить var_dump($DBH); непосредственно перед запуском запроса и покажите нам результат.

3. Я получаю следующее: object (PDO)#1 (0) { }

4. Вы действительно уверены, что проблема в этой строке? Можете ли вы выполнить любой другой запрос, который вы ранее запускали в своем приложении до или после этого запроса? Вы уверены, что используете везде $DBH заглавные буквы?

5. да, если я удалю приведенный выше код, другие запросы будут выполняться нормально

Ответ №2:

Проблема заключается в использовании одинарных и двойных кавычек:

 $STH = $DBH->query("
    SELECT COUNT(*) FROM table WHERE column = '" .$variable. "'
");
  

Я использовал одинарные кавычки ' , чтобы входные данные, включающие одинарные кавычки, оставались действительными. Это не работает с командами MSSQL.