bindValue在这里无法正常工作

时间:2013-09-10 18:53:14

标签: php pdo bind

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上,而且爆炸的回声正常工作......

2 个答案:

答案 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会逃脱'而你不想那个