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]";
    $buscar->execute(); 

}

回声工作正常,但它没有绑定 $buscar 它返回的值:

nome喜欢:busca0

它不会将来自 $explode[0] 的值放在 $busca0 上,并且爆炸的回声工作正常......

4

2 回答 2

0

编辑:请注意, bindValue 在执行之前不会替换您的查询字符串。

因此,正如其他人所问的那样,您需要查看数据库服务器上实际执行的内容。

您可能必须打开MySQL 常规日志才能这样做。

编辑:由于您不能使用常规日志,请尝试PDO debugdumpparams

--

请注意,当输入多个参数时,您的查询库如下所示:

 `nome` LIKE :busca0  AND  `nome` LIKE :busca1  AND  `nome` LIKE :busca2

除非所有参数都相同,否则这将不起作用

于 2013-09-10T19:02:15.877 回答
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 会转义 ' 而你不希望这样

于 2013-09-10T19:05:03.080 回答