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(); 

}

The echos work alright but the its not binding the values on $buscar it returns:

nome LIKE :busca0

It does not put the value from $explode[0] on $busca0 and the echo for explode is working properly...

raina77ow
  • 103,633
  • 15
  • 192
  • 229

2 Answers2

0

EDIT: Note that bindValue won't replace your query string prior to execution.

So, as someone else asked, you need to see what is actually being executed at the DB server.

You may have to turn on MySQL general log to do so.

EDIT: Since you can't use the general log, try PDO debugdumpparams

--

Note that when feeding more than one parameter, your query base looks like this:

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

Which won't work unless all params are the same

LexLythius
  • 1,904
  • 1
  • 12
  • 20
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 will escape ' and you don't want that

cske
  • 2,233
  • 4
  • 26
  • 24