Почему это простое подготовленное заявление PDO не будет работать? - PullRequest
1 голос
/ 09 марта 2019
$stmt =$dbh->prepare('SELECT * FROM config WHERE group=:group AND name=:name');
$stmt->bindParam(':group',$group, PDO::PARAM_STR);
$stmt->bindParam(':name',$name, PDO::PARAM_STR);

Дает исключение:

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 'group=? AND name=?' at line 1

Попытка поместить параметры в функцию execute, то же сообщение.

Установленные мной параметры PDO:

PDO::ATTR_ERRMODE=> PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => FALSE,

Ответы [ 2 ]

1 голос
/ 09 марта 2019

group - это ключевое слово в SQL.Вы не можете использовать его в качестве имени столбца без кавычек.В MySQL такие вещи, как имена столбцов, заключаются в кавычки, то есть:

$stmt =$dbh->prepare('SELECT * FROM config WHERE `group` = :group AND `name` = :name');
1 голос
/ 09 марта 2019

group является зарезервированным словом и не может использоваться как идентификатор без обратных тиков в MariaDB:

SELECT * FROM `config` WHERE `group`= :group AND `name` = :name
...