Неустранимая ошибка: вызов функции-члена query () для необъектной ошибки

У меня небольшая проблема. Я пытаюсь сделать простую систему регистрации / входа с сессиями, и я получил эту ошибку:

Неустранимая ошибка: вызов функции-члена query () для необъекта в C: \ xampp \ htdocs \ members \ includes \ login.inc.php в строке 9

Это соответствующая строка кода:

$result = $conn->query($sql);

Первый раз, когда я попробовал, это работало.

Остальная часть кода:

<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST')
{
$email      = $_POST['email'];
$password   = md5($_POST['password']);
$sql = "SELECT email, password FROM member WHERE email = '$email' AND password = '$password'";
$result = $conn->query($sql);

У меня также есть db.php, который используется для подключения MYSQL, и все в нем хорошо.

0

Решение

Я не могу понять, почему, когда я впервые попробовал, это работало, я думаю, и теперь такая ошибка.

У меня также есть db.php, который используется для подключения MYSQL, и все внутри в порядке .. Может кто-нибудь объяснить мне, почему я продолжаю сталкиваться с этой ошибкой?

Я собираюсь спекулировать. Я предполагаю, что у вас есть отдельный файл (вероятно, называется db.php) который «обрабатывает» настройку соединения с базой данных. Я также собираюсь предположить, что у вас есть цепочка файлов, которые require() (или же include()) в ваше веб-приложение.

Я видел это больше раз, чем хочу вспомнить. Это очень старомодный способ разделения кода на логические куски внутри PHP — который нужно оставить в прошлом.

Я предполагаю, что вы ранее определяли $conn в другом скрипте, который был включен (или требуется) до этот код Глобальная переменная, которая позже была зависимостью при выполнении кода. Невидимый файл, в котором он был объявлен.

Это проблема. Быстрое / взломанное исправление — переименовать $conn или восстановите исходное объявление и убедитесь, что оно глобальное, и убедитесь, что оно включено до этот код запускается.

правильное решение (IMHO) — взглянуть на использование фреймворка (Laravel, Lumen, CodeIgniter, Yii, их много — выбирайте сами) и почитать на темы внедрения зависимостей, автозагрузки и пространства имен. Подумайте о том, почему объявления глобальных переменных создают для не поддерживаемого кода.

Если вы действительно неохотно идете с полной структурой, по крайней мере взгляните на некоторые библиотеки абстракции базы данных, такие как doctrine (и это подбиблиотека dbal) который может быть легко загружен в ваш проект через composer,

1

Другие решения

Как Sascha уже указал, $conn может быть либо вообще не определен, либо не является объектом (отсюда и сообщение об ошибке).

Из предоставленного вами примера кода на самом деле немного сложно определить, какой тип объекта подключения вы используете, но я думаю, что не стоит говорить, что в вашем случае это может быть PDO или же MySQLi.

Для простоты, давайте придерживаться mysqli. Пример рабочего кода, основанный на mysqli, будет выглядеть следующим образом (сокращенный пример взят из приведенных выше документов):

$conn   = new mysqli("localhost", "my_user", "my_password", "world");
$result = $conn->query($sql);

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

Я бы связал ответ Уолли и предоставил бы вам ссылку на документы по PHP, относящиеся к подготовленным высказываниям, но, очевидно, мое отсутствие репутации не позволяет мне это сделать, поэтому просто сделайте быстрый поиск Google для PHP & готовые заявления.

0

В начале:

требуют ‘db.php’;
$ conn = new db ();

-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector