循环中pdo语句的php绑定参数不起作用

lzfw57am  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(454)

我想使用 bindParam .
以下是我的代码的简短版本:

$reindex['f_name'] = 'Tom';
$reindex['l_name'] = 'Riddle';
$reindex['date'] = '2020-12-12';

$sql = "INSERT INTO tbl_user (f_name, l_name, date) VALUES (:f_name, :l_name, :date)";
$stmt = $pdo->prepare($sql);

foreach ($reindex as $key => $value) {
    echo $key . '<br>'; // look at output
    echo $value . '<br><br>';
    $stmt->bindParam($key, $value);
}

$stmt->execute();

回波输出:

f_name
Tom

l_name
Riddle

我没有收到任何错误消息。我将错误报告设置为:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

这会起作用,但我必须分别定义每个绑定:

$stmt->execute([
    'f_name' => $reindex['f_name'],
    'l_name' => $reindex['l_name'],
    'date' => $reindex['date']
]);
huus2vyu

huus2vyu1#

如果你在pdo手册中使用这个

PDO语句::bindparam

将php变量绑定到用于准备语句的sql语句中相应的命名占位符或问号占位符。与pdostatement::bindvalue()不同,该变量作为引用绑定,并且仅在调用pdostatement::execute()时进行计算。
您将了解,在循环中,您使用相同的变量x次。每次循环都会覆盖它。
所以当实际绑定完成时 ->execute() 在准备好的查询中,只有一个值,即这些变量中循环的最后一个值

相关问题