PHP PDO& SQL搜索通配符绑定参数

时间:2016-02-12 15:33:27

标签: php mysql pdo

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

1 个答案:

答案 0 :(得分: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);