为什么这不起作用:
public function query($query, $vars = array())
{
$link = $this->getLink();
if($link)
{
$stmt = $link->prepare($query);
if($stmt)
{
if(count($vars)>0)
{
$count = 1;
foreach($vars as $v)
{
$stmt->bindParam($count, $v);
$count++;
}
}
if($stmt->execute())
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
return false;
}
这有效:
public function query($query, $vars = array())
{
$link = $this->getLink();
if($link)
{
$stmt = $link->prepare($query);
if($stmt)
{
if($stmt->execute($vars))
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
return false;
}
主叫:
$result = $db->query('select * from users where user like ? and email like ?',array('my_user', 'myemail@domain.com'));
使用最终代码进行编辑:
public function query($query, $vars = array())
{
$link = $this->getLink();
if($link)
{
$stmt = $link->prepare($query);
if($stmt)
{
if(count($vars)>0)
{
$count = 1;
foreach($vars as $v)
{
$stmt->bindValue($count, $v);
$count++;
}
}
if($stmt->execute())
return $stmt->fetch(PDO::FETCH_ASSOC);
}
}
return false;
}
答案 0 :(得分:2)
原因是bindParam
将变量(不是其值)绑定到参数。但是,$v
的值会随着for
循环的每次迭代而变化,因此每个查询的参数都会将数组中的最后一项作为其值(不是您想要的我确定)。
我建议使用bindValue
代替bindParam
答案 1 :(得分:1)
我对PDO并不是非常熟悉,但似乎你无法绑定一个不断变化的变量。请改用bindValue。
另请注意,您不应该以这种方式使用LIKE。请改用=