Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 循环内PDO语句的绑定参数不';行不通_Php_Mysql_Sql_Pdo_Prepared Statement - Fatal编程技术网

Php 循环内PDO语句的绑定参数不';行不通

Php 循环内PDO语句的绑定参数不';行不通,php,mysql,sql,pdo,prepared-statement,Php,Mysql,Sql,Pdo,Prepared Statement,我想使用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); f

我想使用
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();
我没有收到任何错误消息。我将错误报告设置为:

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手册中应用此功能

PDO语句::bindParam 将PHP变量绑定到用于准备语句的SQL语句中相应的命名占位符或问号占位符。与PDOStatement::bindValue()不同,该变量被绑定为引用,仅在调用PDOStatement::execute()时进行计算

您将了解,在循环中,您使用相同的变量X次。每次在循环中覆盖它


因此,当实际绑定完成时,在您准备好的查询执行()时,您只有一个值,这些变量中循环的最后一个值,回送的输出显示
f_name
(匹配),
last_name
(不匹配
l_name
),并且没有
日期。始终确保所有参数都已正确绑定。此外,还要绑定特定的变量名,在本例中为
$key
。你想这样做。哦,好吧,我怎样才能用
bindParam
实现同样的效果呢?甚至可以在循环中使用它吗?我使用&value in the loop;)解决了它。谢谢你的提示!
$stmt->execute([
    'f_name' => $reindex['f_name'],
    'l_name' => $reindex['l_name'],
    'date' => $reindex['date']
]);