【发布时间】:2018-10-27 10:15:21
【问题描述】:
我正在尝试构建一个更新 2 个表的 PDO 多准备语句。
当我尝试让我的代码工作时遇到问题并遇到各种错误,最新:SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens
在查看 SO 时,我发现了各种方法,但我不知道如何实现它们。
另一个问题是无法使用$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);。我已经在线阅读了重要的内容,以包括安全性。但是我也明白它不适用于多查询 PDO (?)。
可以进行多重更新还是我应该有不同的脚本? (我的代码也不受 SQL 注入的影响吗?)
这是我正在使用的代码:
<?php
try {
$conn = new PDO('mysql:host=localhost;dbname=*', '*', '*');
$conn->exec("SET CHARACTER SET utf8"); // Sets encoding UTF-8
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
//$conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$est_id = $_POST['est_id'];
$known_for = $_POST['known_for'];
$street_address = 'addressToAdd';
$sql = " UPDATE `theList`
SET `known_for` = :known_for
WHERE `id` = :est_id
";
$sql = " UPDATE `est_address`
SET `street_address` = :street_address
WHERE `id` = :est_id
";
$params = array(
':est_id' => $est_id,
':known_for' => $known_for,
':street_address' => $street_address
);
$statement = $conn->prepare($sql);
$statement->execute($params);
$conn = null; // Disconnect
}
catch(PDOException $e) {
echo $e->getMessage();
}
?>
【问题讨论】: