如何在PDO预处理语句的标记参数中使用周期点?

时间:2014-10-07 11:27:48

标签: php pdo

对于涉及多个表的SQL查询,如何构建这样的PDO语句?

因为这不起作用:

$stmt = $pdo -> prepare("UPDATE category, product 
    SET product.category_id = category.id, 
    product.xxx = :product.xxx, 
    category.yyy = :category.yyy 

    WHERE product.category_slug = category.slug 
    AND product.aaa = :product.aaa"
);

$stmt->execute(array(
  'product.xxx' => '',
  'category.yyy' => '',
  'product.aaa' => ''
));

这给出了这些错误:

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY093]: 
Invalid parameter number: parameter was not defined'

PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined

如何使这项工作? PDO似乎不允许标记参数中的周期点?我想我注定要下注?

1 个答案:

答案 0 :(得分:2)

以下是命名占位符的允许字符:

  

[:] [A-ZA-Z0-9 _] +;

字母数字和下划线。

参考。 https://github.com/php/php-src/blob/master/ext/pdo/pdo_sql_parser.re(这是来源)