Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.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 bindParam未将正确的数据返回到数据库_Php_Pdo - Fatal编程技术网

Php PDO bindParam未将正确的数据返回到数据库

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); /

我想用我创建的方法使用pdo在数据库中插入一些数据,但它没有返回正确的数据

我对show和select方法使用了相同的代码,并且工作得很好,在方法base()的foreach中,bindParam在其中,我使用var_dump()查看$key和$value返回的是什么,它们返回的是正确的数据,但是当我查看数据库时,所有列中只插入最后一个值

受保护的函数基($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,谢谢你: