Php PDO bindParam未将正确的数据返回到数据库
我想用我创建的方法使用pdo在数据库中插入一些数据,但它没有返回正确的数据 我对show和select方法使用了相同的代码,并且工作得很好,在方法base()的foreach中,bindParam在其中,我使用var_dump()查看$key和$value返回的是什么,它们返回的是正确的数据,但是当我查看数据库时,所有列中只插入最后一个值Php PDO bindParam未将正确的数据返回到数据库,php,pdo,Php,Pdo,我想用我创建的方法使用pdo在数据库中插入一些数据,但它没有返回正确的数据 我对show和select方法使用了相同的代码,并且工作得很好,在方法base()的foreach中,bindParam在其中,我使用var_dump()查看$key和$value返回的是什么,它们返回的是正确的数据,但是当我查看数据库时,所有列中只插入最后一个值 受保护的函数基($query,$params=null,$show=true) { $stmt=$this->conn->prepare($query); /
受保护的函数基($query,$params=null,$show=true)
{
$stmt=$this->conn->prepare($query);
//检查是否有参数,如果没有,这部分将是无用的
if(isset($params)){
//让foreach绑定所有参数,问题就在这里,但为什么呢?
foreach($key=>$value的参数)
$stmt->bindParam($key,$value);
}
$stmt->execute();
//检查是否需要显示值(用于选择和显示命令)
如果(isset($show)){
$results=json_encode($stmt->fetchAll(PDO::FETCH_ASSOC));
返回$results;
}
}
公共函数add($value=array(),$table)
{
//将数组键转换为字符串,以便在pdo中放置要使用的列
$keys=数组_键($value);
$keystr=内爆(“,”,$keys);
//仅获取以后使用的值
$vlr=数组_值($value);
//为使变量名称大写并以以下开头创建foreach循环:
$i=0;
foreach($key作为$key=>$data的键)
{
$x[$i]=':'.strtoupper($data);
$i++;
}
$values=内爆(“,”,$x);
//将数组与要与其值绑定的变量组合在一起
$bind=数组和组合($x,$vlr);
返回$this->base(“插入到$table($keystr)VALUES($VALUES)”,$bind,false);
}
我使用bindParam,然后执行,但最后一个值将在所有列中返回,例如:
$db->add(['name'=>'somename','email'=>'example@mail.com“],“用户”);
这应该插入到数据库中
name:某个名字,
电邮:example@mail.com
但它正在回归
名称:example@mail.com,
电邮:example@mail.com
如果我换成
$db->add(['email'=>'example@mail.com','name'=>'some name'],'users');
它回来了
name:某个名字,
电子邮件:一些名字
可以这样做吗?
bindParam
采用变量引用。由于您使用的是$value
,因此它将使用上次设置为该变量的内容。尝试使用bindValue
而不是相反,完全跳过单个绑定,只需使用$stmt->execute($params)
就可以了,我将继续学习php,因为在js中已经有一段时间了,谢谢大家:bindParam
使用了一个变量引用。由于您使用的是$value
,因此它将使用上次设置为该变量的内容。试着用bindValue
代替。或者,完全跳过单个绑定,只需使用$stmt->execute($params)
就可以了,我将在js中学习php,谢谢你: