循环内 PDO 语句的绑定参数不起作用

我想使用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']

]);


POPMUISE
浏览 74回答 1
1回答

守候你守候我

如果您从 PDO 手册中应用它PDOStatement::bindParam将 PHP 变量绑定到用于准备语句的 SQL 语句中相应的命名或问号占位符。与 PDOStatement::bindValue() 不同,该变量被绑定为一个引用,并且只会在 PDOStatement::execute() 被调用时被评估。你会明白在你的循环中你使用了相同的变量 X 次。每次循环都覆盖它。因此,当实际绑定完成时,在您->execute()准备好的查询时,您只有一个值,这些变量中循环中的最后一个值
打开App,查看更多内容
随时随地看视频慕课网APP