2016-08-13 85 views
0

我试图根据它获取的信息创建动态查询。动态sql查询 - 绑定变量数量与令牌数量不匹配

当$ QUERY2是例如: '类型'=> '的PvP', '在线'=> '高级'

和$查询:SELECT * FROM dispserveur其中type =:类型和在线=:在线

这是工作,

$req = $bdd->prepare("$query"); 
$req->execute(array('type' => 'PvP', 'online' => 'Premium')); 

但是,当我在执行使用$ QUERY2变量,它不工作。

$req = $bdd->prepare("$query"); //C 
$req->execute(array($query2)); 

我每次都得到相同的错误。

Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens 

这是代码,

unset($sql); 
unset($sql2); 

if (isset($type2) AND $type2 != "all") { 
$sql[] = " type = :type "; 
$sql2[] = " 'type' => '$type2'"; 

} 

if (isset($online2) AND $online2 != "all") { 
$sql[] = " online = :online "; 
$sql2[] = " 'online' => '$online2'"; 

} 
if (isset($version2) AND $version2 != "all") { 
$sql[] = " version LIKE :version "; 
$sql2[] = " 'version' => %$version2%"; 

} 

$query = "SELECT * FROM dispserveur"; 

if (!empty($sql)) { 
$query .= ' WHERE ' . implode(' AND ', $sql); 
} 
if (!empty($sql2)) { 
$query2 = implode(', ', $sql2); 
} 

echo $query; 
echo "<br />"; 
echo $query2; 

$req = $bdd->prepare("$query"); //C 
$req->execute(array($query2)); 
while ($red = $req->fetch()) 
{echo "$red[ip]<br />";} 

感谢您的帮助!

回答

0

​​的参数应该是一个关键字匹配:paramName的关联数组。相反,您使用$query2这只是一个字符串。这就是为什么你的代码不工作。

变化:

$sql2[] = " 'type' => '$type2'"; 
$sql2[] = " 'online' => '$online2'"; 
$sql2[] = " 'version' => %$version2%"; 

到:

$sql2['type']=$type2; 
$sql2['online']=>$online2; 
$sql2['version']=>"%$version2%"; 

后来,改变

$req->execute(array($query2)); 

$req->execute($sql2); 
0

beetlejuice的方法是正确的,但它不是

$ req-> execute(array($ query2));

$ req-> execute(array($ sql2));

$req->execute(array($query2)); 

to 

$req->execute($sql2); 

谢谢您的快速答复:)

相关问题