2014-10-07 73 views
1

对于涉及多个表的SQL查询,我该如何构造这样的PDO语句?如何在标记参数中使用句点以便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似乎不允许标记参数中的点周期?我想我注定要下划线?

+0

将':product.xxx'改为':product1'和'product.aaa'为':product2',然后绑定相应的值。相同'category.yyy' – 2014-10-07 11:33:30

+0

@ V4KK4R,那么我想这是不可能的标记参数中使用点? – 2014-10-07 11:35:52

+0

是不允许的。 – 2014-10-07 11:39:14

回答

2

下面是允许的字符对指定的占位符:

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

字母数字和下划线。

Ref。 (这是源文件)