Php pdo mysql insert将相同的内容放在多个字段中
好吧,出于某种原因,这个查询:Php pdo mysql insert将相同的内容放在多个字段中,php,pdo,Php,Pdo,好吧,出于某种原因,这个查询: $db->sqlquery("INSERT INTO `password_reset` SET `user_email` = ?, `secret_code` = ?, `expires` = ?", array($email, $random_string, $next_week)); 在每个字段中输入“random_string”,我不知道为什么 这是我的查询代码: public function sqlquery($sql, $objects
$db->sqlquery("INSERT INTO `password_reset` SET `user_email` = ?, `secret_code` = ?, `expires` = ?", array($email, $random_string, $next_week));
在每个字段中输入“random_string”,我不知道为什么
这是我的查询代码:
public function sqlquery($sql, $objects = array())
{
global $core;
try
{
$this->STH = $this->database->prepare($sql);
foreach($objects as $k=>$p)
{
// +1 is needed as arrays start at 0 where as ? placeholders start at 1 in PDO
if(is_numeric($p))
{
$this->STH->bindParam($k+1, $p, PDO::PARAM_INT);
}
else
{
$this->STH->bindParam($k+1, $p, PDO::PARAM_STR);
}
}
return $this->STH->execute();
$this->counter++;
}
catch (PDOException $e)
{
$core->message($e->getMessage());
}
}
知道为什么会这样做吗?PDO参数由引用绑定。因此,所有参数都被绑定为对同一
$p
变量的引用,执行查询时该变量的值是数组的最后一个元素
尽管您说过所有字段中插入的值都是数组的第二个元素。我不知道这是为什么
解决方案是使用
bindValue
而不是bindParam
在每次迭代中回显$p
的值怎么样?我试过了,$p是正确的。$p是参数,如果对象数组和$p是要放入数据库的内容,它会循环每个参数。我想你可能是对的,我还没有测试过,但我不知道在哪里可以使用不同的方法。刚刚测试过,你是100%正确的,非常感谢,我甚至没有想到这一点,因为每次都是$p,它不是像bindValue那样在那里做的,而是像Param那样存储然后再做的。我认为另一个选项是在foreach中使用$k=>&$p
,因此$p
将是对数组元素的引用。