gpt4 book ai didi

php - 通过 PDO 和 token 更新 MySQL 数据库 - 所有参数都设置为数据集中的最后一个值

转载 作者:行者123 更新时间:2023-11-29 14:12:30 24 4
gpt4 key购买 nike

正如标题所述:我正在尝试使用 PDO 和 token 更新 MySQL 数据库中的特定记录,以防止任何注入(inject)。

这是我的代码:

一些帮助构建查询的数组:

$id = 1234
$values = array ('a','b','c',);
$variables = array ($A, $B, $C);

通过循环构建的查询:

$sql =  "UPDATE table1 SET ";   
foreach($values as $value)
{
$sql .="$value = :$value, ";
}
$sql = rtrim($sql,', ');
$sql .=" WHERE id = '$id'";

通过 PDO 执行查询:

try     
{
$pdo = new PDO('mysql:host=localhost; dbname=db01', $username, $password);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $pdo->prepare($sql);
foreach(array_combine($values, $variables) as $value=>$variable)
{
$stmt->bindParam(":$value", $variable);
}

$stmt->execute();

结果:指定记录中的每个字段(匹配 $id)都设置为相同的值,该值始终等于数组中列出的最后一个变量的内容(在本例中,它们都包含 $C 中保存的值)

回显 SQL 查询表明它已正确构造。

有什么想法吗?感谢您的考虑

最佳答案

从评论中扩展:

在您的 foreach 循环中,$variable 是一个,而不是引用,因此当您mysqli_stmt::execute(),您实际上最终使用了最后一个$variable

为了避免这种情况,你必须使用这样的东西:

$cache=array_combine($values,$variables);
foreach($cache as $value=>$variable)
{
$stmt->bindParam(":$value",$cache[$value]);
}

关于php - 通过 PDO 和 token 更新 MySQL 数据库 - 所有参数都设置为数据集中的最后一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13244328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com