【问题标题】:Why does this simple PDO prepared statement won't work?为什么这个简单的 PDO 准备语句不起作用?
【发布时间】:2019-03-09 10:44:52
【问题描述】:
$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

试图把参数放在执行函数中,同样的信息。

我设置的 PDO 选项是:

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

【问题讨论】:

    标签: php pdo mariadb prepared-statement


    【解决方案1】:

    groupreserved word,不能在 MariaDB 中用作没有反引号的 identifier

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

    【讨论】:

    • 这对我有用。也许我应该用我的母语来命名我的专栏,以避免将来发生这种情况。
    【解决方案2】:

    group 是 SQL 中的关键字。如果不引用它,则不能将其用作列名。在 MySQL 中,列名之类的内容用反引号引起来,即:

    $stmt =$dbh->prepare('SELECT * FROM config WHERE `group` = :group AND `name` = :name');
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-07
      • 2020-08-21
      • 1970-01-01
      • 2018-01-24
      相关资源
      最近更新 更多