if($_GET['s']<>''){
$explode = explode(' ',$_GET['s']);
$num = count($explode);
for($i=0;$i<$num;$i++){
$busca .= " `nome` LIKE :busca$i ";//OR `district` LIKE :busca$i OR `city` LIKE :busca$i OR `area` LIKE :busca$i ";
if($i<>$num-1){ $busca .= ' AND '; }
}
$buscar = DB::getConn()->prepare("SELECT * FROM users WHERE $busca");
for($i=0;$i<$num;$i++){
$buscar->bindValue(":busca$i",'%'.$explode[$i].'%',PDO::PARAM_STR);
}
echo "$busca";
echo "$explode[0]";
$buscar->execute();
}
回声工作正常,但它没有约束它返回的$ buscar上的值:
nome
LIKE:busca0
它没有将$ explode [0]的值放在$ busca0上,而且爆炸的回声正常工作......
答案 0 :(得分:0)
编辑:请注意,bindValue在执行之前不会替换您的查询字符串。
所以,正如其他人问的那样,你需要在数据库服务器上看到实际执行的内容。
您可能需要启用MySQL general log才能执行此操作。
编辑:由于您无法使用常规日志,请尝试PDO debugdumpparams
-
请注意,在提供多个参数时,您的查询库如下所示:
`nome` LIKE :busca0 AND `nome` LIKE :busca1 AND `nome` LIKE :busca2
除非所有参数都相同,否则不起作用
答案 1 :(得分:0)
if($_GET['s']<>''){
$explode = explode(' ',$_GET['s']);
$num = count($explode);
for($i=0;$i<$num;$i++){
$busca .= " `nome` LIKE :busca$i ";//OR `district` LIKE :busca$i OR `city` LIKE :busca$i OR `area` LIKE :busca$i ";
if($i<>$num-1){ $busca .= ' AND '; }
}
$buscar = DB::getConn()->prepare("SELECT * FROM users WHERE $busca");
for($i=0;$i<$num;$i++){
$buscar->bindValue(":busca$i",'%'.$explode[$i].'%',PDO::PARAM_STR);
}
echo "$busca";
echo "$explode[0]";
echo var_export($buscar->execute()->fetchAll(),true);
}
bind会逃脱'而你不想那个