Предупреждение: PDO :: prepare () ожидает, что параметр 1 будет строкой, объект задан

Я пытался преобразовать старый mysql тоже pdo как я пытаюсь научиться pdo работает, я работаю над этим одним файлом в течение нескольких часов, ломая голову, и не могу понять, что не так, и я уверен, что это много.

try{
$check_user_data = $dbh->query("SELECT * FROM members WHERE username = '$username'");
$stmt = $dbh->prepare($check_user_data);
$stmt->execute();
$result->bind_result($username);
$data_exists = ($check_user_data->fetchColumn() > 0) ? true : false;
if($data_exists = false){
$final_report.="This username does not exist..";
}else{
$get_user_data = $stmt->fetch(PDO::FETCH_ASSOC);
if($get_user_data['password'] == $password){
$start_idsess = $_SESSION['username'] = "".$get_user_data['username']."";
$start_passsess = $_SESSION['password'] = "".$get_user_data['password']."";
$final_report.="You are about to be logged in, please wait a few moments.. <meta http-equiv='Refresh' content='2; URL=members.php'/>";
}
}
foreach ($dbh->query($sql) as $row){
}
$dbh = null;
}
catch(PDOException $e){
echo $e->getMessage();
}

Также становится смертельным

Fatal error: Call to a member function execute() on a non-object

Не уверен, что это связано с предупреждением или нет.

1

Решение

Сначала измените эти две строки:

$check_user_data = $dbh->query("SELECT * FROM members WHERE username = '$username'");
$stmt = $dbh->prepare($check_user_data);

чтобы:

$stmt = $dbh->prepare("SELECT * FROM members WHERE username = :username");
$stmt->bindParam(':username', $username);

Это использует функцию параметра подготовленных операторов, которая предотвращает внедрение SQL.

Далее, PDO не имеет bind_result метод, это часть MySQLI. Чтобы получить результаты, вы должны сделать:

$get_user_data = $stmt->fetch(PDO::FETCH_ASSOC);
$data_exists = ($get_user_data !== false);

Затем вы должны удалить вызов $stmt->fetch в else блок, потому что он будет пытаться получить следующий ряд результатов.

2

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

Роковое определенно связано с предупреждением; вы передаете результаты $dbh->query() (который является объектом PDOStatementObject) в $dbh->prepare, вызывая $dbh->prepare вернуть что-то, что не является объектом.

Просто переместите SQL в $dbh->prepare позвони и избавься от $dbh->query() полностью.

0

Для людей, которые могут прийти сюда, моя проблема была немного другой, я пытался включить фильтр для проекта doctrine / symfony и случайно допустил ошибку в следующей строке:

$filter->setParameter($name, $someObject);

и когда я вызвал функцию getParameter($name) в addFilterConstraint Функция, которую я получил ту же ошибку

Предупреждение: PDO :: prepare () ожидает, что параметр 1 будет строкой, объект задан

А потом я обнаружил ошибку. исправление было бы заменить второй вход setParameter из $someObject в $someString что-то вроде этого:

$filter->setParameter($name, 'some string which is the real value you want to get later');
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector