2016-02-12 97 views
0

我想创建一个网站的搜索功能,并创建了从PHPMYADMIN生成的SQL代码,见下文;PHP的PDO和SQL搜索通配符绑定参数

$sql = "SELECT * FROM `bg85ow`.`sessions` WHERE CONVERT(`SessionName` USING utf8) LIKE '%:SessionName1%'"; 

这里是处理查询的PHP代码;

//bind params 
       $SessionName1 = filter_input(INPUT_GET, 'search'); 
       $stmt -> bindValue(':SessionName1', $SessionName1, PDO::PARAM_STR); 

       //execute 
       $success = $stmt -> execute(); 

       if (!$success){ 
        print $stmt->errorInfo()[2]; //PDO driver error message 
       } 

       else{ 
       } 

       //array 
       $r = $stmt->fetchAll(PDO::FETCH_ASSOC); 
       $dbh = null; 

       if(!$r) 
       { 
        echo "No Results"; 
       }  

       foreach ((array) $r as $row) { 
       echo $row['SessionId']; 
       echo $row['SessionName']; 
       } 

出于某种原因,这将不会返回execute部分工作正常并且传球成功测试的结果,但那么一旦它到达阵列没有返回任何结果。

我检查了并且$SessionName1在搜索中有这个词,所以它被传递给查询。

当我改变%:SessionName1%football这是搜索词我与测试,代码返回的结果不错,但一旦变回:SessionName1它不会返回结果,即使搜索词是完全一样的。

任何人都可以看到我做错了什么,我花了很多年看着这个,看不到错误。

我到处搜索了一个这个问题的答案,但是我找不到一个针对这个问题的具体问题,我也是一个初学PHP和SQL的人。

+2

可能是你在'$语句输入错误 - > bindValue( ':SessionName1',$ SessionName1,PDO :: PARAM_STR);'...有你'绑定地方SessionName1'代替SESSIONNAME的' '在字符串中...即,这必须是这样的:'$ stmt - > bindValue(':SessionName',$ SessionName1,PDO :: PARAM_STR);' – Wizard

+0

你必须使用正确的sessionName。 – Monty

+0

[占位符只能表示一个完整的数据字面量 - 即一个字符串或一个数字。](https://phpdelusions.net/pdo#like) –

回答

1

试试这个例子:检查你错在哪里。

// Get the keyword from query string 
$keyword = $_GET['keyword']; 
// Prepare the command 
$sth = $dbh->prepare('SELECT * FROM `users` WHERE `firstname` LIKE :keyword'); 
// Put the percentage sing on the keyword 
$keyword = "%".$keyword."%"; 
// Bind the parameter 
$sth->bindParam(':keyword', $keyword, PDO::PARAM_STR); 
+0

好吧,所以我试了这个并收到了这条消息'注意:未定义的索引:SessionName中的D:\ xampp \ htdocs \ PPW4 \ SearchSessions.php第9行'它确实从表中返回了所有内容,但没有返回搜索查询 – Chris

+0

好了解决了它在变量名称中发生了错误,此工作非常感谢您的帮助 – Chris

+0

我在问题的评论中已经提到它: - >您必须使用正确的sessionName。无论如何,你做到了。 :) – Monty