2017-05-24 114 views
-2

我使用这个代码使用PDO来生成搜索查询:PHP PDO喜欢(搜索)

   $test = $_POST["user_search"]; 

       //search for user in database 
       $query = $conn->prepare('SELECT * FROM user WHERE user_email LIKE ' . "':search'"); 
       $keyword = "%".$test."%"; 
       $query->bindParam(':search', $keyword, PDO::PARAM_STR); 
       $query->execute(); 

       $results = $query->fetchAll(); 
       print_r($results); 

       $query->debugDumpParams() 

调试输出是:

SQL: [50] SELECT * FROM user WHERE user_email LIKE ':search' Params: 1 Key: Name: [7] :search paramno=-1 name=[7] ":search" is_param=1 param_type=2 

任何想法,出了问题?例如$ _POST [“user_search”]为“507”。读取调试输出似乎有一个问题,因为值没有显示在任何地方。

+0

尝试删除单引号:搜索。就我所知,PDO不需要单引号。 –

+1

尝试'SELECT * FROM user WHERE user_email LIKE:search'。不知道你为什么试图一起查询这样的查询。 PDO将用您传递给它的值替换':search'作为值。 –

+1

关于针对过去问题提供的解决方案,您的接受记录颇具疑问。 –

回答

0

PDO将放入任何必要的引号以正确地逃避您的数据。占位符应放在为-是:

$query = $conn->prepare('SELECT * FROM user WHERE user_email LIKE :search'); 

用字符串调用bindParam会提示PDO使用引号,因此转义值。

+0

对不起,你已经陷入了一个相当可疑的记录,首先我检查;-) –

+0

'[php]'人群并不总是最有价值的,这是真的。太多路过的问题。 – tadman

+0

明白了。 –