繁体   English   中英

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

[英]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有来自搜索的术语,因此将其传递给查询ok。

当我将%: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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM