如何解决如何使用 PDO 准备语句绑定多个值?
这是我的代码
$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 循环中,具有键 name2 和 value king 的数组 $bindParams 中的第二个值覆盖了 $stmt->bindParam 并且只有 name2 king 被插入到数据库中。对于每次插入,我都在数据库中成为王者。这是数据库的屏幕截图。如何在不重复的情况下成功插入数组中的两条记录。
解决方法
您可以简单地在 execute()
中传递参数。无需使用 bindParam()
,它通过引用绑定并会在循环内覆盖您的值。
用这个替换你的代码:
public function prepared_query(string $sql,array $bindParams=[]): void
{
$stmt = $this->PDO->prepare($sql);
$stmt->execute($bindParams);
}
如果你真的想要一个你真的不需要的循环,那么你必须按值绑定,而不是按引用绑定。例如
public function prepared_query(string $sql,array $bindParams = []): void
{
$stmt = $this->PDO->prepare($sql);
foreach ($bindParams as $param => $var) {
$stmt->bindValue($param,$var);
}
$stmt->execute();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。