В сообщении об ошибке говорится все. Вы вызываете метод query
как статический метод (метод, который не требует создания экземпляра класса), хотя он не является статичным.
Просто, чтобы дать немного больше информации о том, почему вы не можете сделать его статической функцией (так как ваш вопрос заставляет меня поверить, что так вы хотите решить эту ошибку).
При вызове объекта PDO, вы передаете хост базы данных, имя пользователя, пароль, тип БД и по умолчанию Databse его конструктору. (это не все требуемые параметры). Установлено соединение с сервером базы данных, поэтому вы можете запрашивать данные.
Если ваш метод запроса был статическим, вам нужно было бы подключиться, запросить, отключить и вернуть результаты для каждого запроса, который вы хотите запустить. Очевидно, это не хороший подход.
Объект PDO позволяет выполнять многое, гораздо больше, чем просто выполнять запросы: предположим, что ваша БД работает на движке InnoDB. Статический метод запроса просто попытается выполнить запрос DELETE
, но не оставляет места для защитной сетки, если все пойдет не так. PDO предоставляет методы $db->commit();
и $db->rollBack();
, чтобы предотвратить повреждение данных.
Есть много, много больше хороших причин, почему вы не должны даже думать о расширении класса PDO, и делает статические функции, но вы можете узнать для себя чтение the docs.
В вашем примере вы хотите получить номер строки после выполнения запроса. Подумайте о том, что это значит: нет экземпляра, чтобы присвоить это значение одному из своих свойств, а также нет подключения к базе данных, на которой вы только что выполнили свой запрос. Единственный способ получить номер строки в вашем случае - это повторить запрос и подсчитать. IMO, это просто глупо
1 вещь, чтобы иметь в виду: результат имеет место, что называется PDOStatement, а не фактический результат запроса , чтобы получить доступ к этим: '$ actualResults = $ result-> fetchAll (PDO :: FETCH_ASSOC);' или 1 на 1 'while ($ row = $ results-> fetch (PDO :: FETCH_ASSOC)) {echo $ row [ 'далеко от дома'];} ' –