尝试使用LIKE%表达式时SQL查询不起作用

时间:2014-03-17 10:37:30

标签: php sql

我之前从未使用过LIKE表达式,所以也许我错过了编码中的一些东西。

我想说,如果任何文本与数据库中status列中的内容匹配,则输出它。

        $searchText = $_GET["searchText"];
        $sql = "SELECT status FROM tbl_status WHERE status like '% $searchText %'";

        $q   = $conn->prepare($sql);
        $q->bindValue(':who',$who,PDO::PARAM_INT);
        $q->execute();

            while($r = $q->fetch(PDO::FETCH_ASSOC)){     
                    echo $r['status'];
                  }

目前,尽管数据库中的信息是100%,但页面上没有显示任何结果。

由于错误而更新了代码。 (仍在输出结果)

$sql = "SELECT status FROM tbl_status WHERE status like '%:searchText%'";

        $q   = $conn->prepare($sql);
        $q->bindValue(':searchText',$searchText,PDO::PARAM_INT);
        $q->execute();

            while($r = $q->fetch(PDO::FETCH_ASSOC)){     
                    echo $r['status'];
                  }

4 个答案:

答案 0 :(得分:2)

删除$ searchText变量周围的空格。

关于安全性的评论: 通过直接使用GET global中的内容,用户可以将任何他想要的内容注入您的查询,并可以更改您的数据 - 因此,您必须清理输入。

请在此处阅读Sql Injection

关于使用LIKE引用SQL语句的值:

$name = 'myname';
$st   = $pdo->prepare("SELECT ... WHERE name LIKE :name");
$st->execute(array('name' => "%$name%"));

答案 1 :(得分:2)

尝试摆脱变量

周围的空格
$sql = "SELECT status FROM tbl_status WHERE status like '%$searchText%'";

答案 2 :(得分:0)

您已经使用绑定变量,因此绑定您的searchtext

$searchText = $_GET["searchText"];
$searchText = '%' . $searchText . '%';

$sql = "SELECT status FROM tbl_status WHERE status like :search";
$q = $conn->prepare($sql);
$q->bindValue(':search', $searchText, PDO::PARAM_STR);
$q->execute();

请注意,您的searchtext是一个字符串,而不是整数

答案 3 :(得分:0)

尽可能地清理用户输入(使其符合您的预期!)然后使用准备好的语句......您应该没事。

您编写的查询完全没有优化,因此非常耗时。当您的表具有大量行(全表扫描)时,这可能会有问题。确保您无法搜索'%$ searchText%'如果您有可能,请确保在您要搜索的字段上设置索引(即" status")以大幅降低此类搜索的成本。