php - 循环内 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']
]);
解决方案
如果您从 PDO 手册中应用它
PDOStatement::bindParam
将 PHP 变量绑定到用于准备语句的 SQL 语句中的相应命名或问号占位符。与 PDOStatement::bindValue() 不同,该变量被绑定为引用,并且只会在调用 PDOStatement::execute() 时进行评估。
你会明白,在你的循环中,你使用了相同的变量 X 次。每次循环覆盖它。
因此,当实际绑定完成时,在->execute()
您准备查询时,您只有一个值,即这些变量中循环中的最后一个值
推荐阅读
- typoscript - TYPO3:用 div 包裹内容元素
- javascript - React Fullcalendar - 列标题格式
- python - 如何在 Django 中删除未激活的预订?
- tensorflow - 如何训练 Huggingface TFT5ForConditionalGeneration 模型?
- scala - 用于 Scala 2.12 的 Twitter API
- java - JTable 的外观差异
- python - 使用 lxml 标记部分文本
- java - 使用未知键的 Jolt 转换 JSON 规范
- puppeteer - 如何使用 puppetee 从检查元素中获取文本
- reactjs - 如何在 useEffect hook(react) 中启用 Playertone.js 的音量滑块?