【发布时间】:2025-12-05 13:45:01
【问题描述】:
这是我的代码
$bindParams = [
'name1' => 'Law',
'name2' => 'King'
];
$sql = "INSERT INTO users (name) VALUES (:name1),(:name2);";
$db->prepared_query($sql,$bindParams);
class Database
{
public function __construct
(
public \PDO $PDO
)
{}
public function prepared_query(string $sql='',$bindParams=[]): bool
{
$stmt = $this->PDO->prepare($sql);
if(count(value:$bindParams) !=0)
{
foreach ($bindParams as $k => $v)
{
$stmt->bindParam(param:":$k",var:$v);
}
}
$x = $stmt->execute();
if($x)
{
return true;
}else{
return false;
}
}
}
我面临的问题是,在 foreach 循环中,数组 $bindParams 中具有键 name2 和 value king 的第二个值覆盖了 $stmt->bindParam,并且只有 name2 king 被插入到数据库中。对于每一个插入,我都在数据库中成为王者。这是数据库的屏幕截图。如何在不重复的情况下成功地从数组中插入两条记录。
【问题讨论】:
-
您应该可以删除
foreach并将参数传递给$x = $stmt->execute($bindParams); -
@Nigel Ren 我不想传递数组 $bindParams 来执行函数。你能建议我用其他方法为数组的每个键复制这个 $stmt->bindParams() 吗?然后一次尝试对所有这些执行 $stmt->execute() ??
-
为什么不把它们传递给
execute(),这是一种常见的做法? -
我想知道反过来只是为了知识..:) @Nigel Ren
-
@Nigel 你能编辑代码并发布吗?
标签: php pdo prepared-statement