我之前从未使用过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'];
}
答案 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")以大幅降低此类搜索的成本。