PHP PDO和SQL Search通配符绑定参数


PHP PDO & SQL Search wildcard bind parameters

我正在尝试为一个站点创建一个搜索功能,并创建了从PHPMYADMIN生成的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 的初学者。

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

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