我有一个简单的搜索form
,用于使用AJAX向我的php脚本发送POST
请求。我希望脚本在我的数据库中搜索title列中的关键字,并返回找到它的行。发布的数据看起来像"searchword=test1"
,其中test1
位于我的文字输入内容中。
我的数据库中有两行,一行标题为test1,另一行标题为test2。如果我SELECT * FROM articles
我可以看到结果很好。如果我在控制台中输入SELECT * FROM articles WHERE title LIKE 'test1';
,我会得到正确的结果,但是我的php脚本返回一个空数组。
不知道我在这里做错了什么,感谢任何帮助。
我的php:
try {
$hostname = "localhost";
$username = "root";
$password = "";
$db = new PDO("mysql:host=$hostname;dbname=topdecka_PTC",$username, $password);
if (!empty($_POST["searchword"])) {
$searchword = $_POST["searchword"];
$query = $db->prepare("SELECT * FROM articles WHERE title LIKE %:seachword%");
$query->execute(array(':searchword' => $searchword));
$result = $query->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result);
die();
}
else {
$query = $db->prepare('SELECT * FROM articles');
$query->execute();
$result = $query->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result);
die();
}
} catch (PDOException $e) {
echo "Error!: " . $e->getMessage() . "<br/>";
die();
}
答案 0 :(得分:0)
首先,根据您的作业,您忘记了$
的{{1}}符号:
旁注:我在%:seachword%
注意到的拼写错误应该按照seachword
searchword
':searchword' => $searchword
但是,我会做这样的事情:
$searchword = $_POST["searchword"];
然后
LIKE :seachword
语法示例:
$query->execute(array(":searchword" => "%" . $searchword . "%"));
还要确保您的表单确实有一个POST方法,并确保您的元素确实已命名且没有拼写错误。
将error reporting添加到文件的顶部,这有助于查找错误。
$sqlprep = $conn->prepare("SELECT `column` FROM `table` WHERE `column` LIKE :word");
$sqlprep->bindValue(':word', '%value%');
旁注:错误报告应仅在暂存时完成,而不是生产。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
// rest of your code
,以捕获潜在错误(如果有)。答案 1 :(得分:0)
它无效的原因是因为:searchname的值被转义。结果,
SELECT * FROM articles WHERE title LIKE %:seachword%
被解释为:
SELECT * FROM articles WHERE title LIKE %"test1"%
这是一个无效的查询。您需要引用整个字符串或使用concat()添加%in。
您的两个选择是:
$query = $db->prepare("SELECT * FROM articles WHERE title LIKE :seachword");
$query->execute(array(':searchword' => "%" . $searchword . "%"));
或:
$query = $db->prepare("SELECT * FROM articles WHERE title LIKE CONCAT('%', :seachword, '%')");
$query->execute(array(':searchword' => $searchword));
就我个人而言,我更喜欢选择CONCAT,因为在我看来,它更好地分离了职责。