При переходе с PHP 7.4 на PHP 8.1 возникла ошбка с PDO
Подскажить что нет так. После того как перешёл на новую версию PHP 8.1 PDO начало выдовать ошибку синтексиса SQL но при это на PHP 7.4 всё работало. Не где не описаны новые изменения в PHP 8 по PDO.
Ошибка
Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'key = 'home_page'' at line 1 in
public function query($sql, $values = [], $statement = PDO::FETCH_OBJ)
{
$sth = $this->link->prepare($sql);
$sth->execute($values);
$result = $sth->fetchAll($statement);
if ($result === false){
return [];
}
return $result;
}
$this->link - подключение к бд через PDO
Входные данные $sql является sql строка, а $value массив с параметрами.
$sql = "SELECT * FROM options WHERE key = ?";
$value = array('key');
Ответы (1 шт):
Автор решения: Алексей Шиманский
→ Ссылка
Попробуйте писать не значение сразу, а передавать именно переменные. Возможно execute работает именно с ссылками на переменные, а не чисто с массивом значений. Т.е. вместо
$value = array('key');
писать прмиерно так:
$myValue = 'test';
$executeValues = array($myValue);
$sth = $this->link->prepare($sql);
$sth->execute($executeValues);
Еще key может быть ключевым словом БД и поэтому название столбца лучше заключить в обратные кавычки