我正在尝试在我的网站上创建搜索功能。它没有显示任何结果,我不断收到Call to a member function prepare() on a non-object in line x
...
function doSearch() {
$output = '';
if(isset($_POST['search'])) {
$searchq = $_POST['search'];
$searchq = preg_replace ("#[^0-9a-z]#i","",$searchq);
$sql = "SELECT * FROM entries WHERE name LIKE :searchq or description LIKE :searchq or content LIKE :searchq";
$stmt = $conn->prepare($sql);
$stmt->bindParam(":searchq",$searchq,PDO::PARAM_STR);
$stmt->execute();
$count = $stmt->rowCount();
if($count == 0) {
$output = '<tr><tr>No results found.</tr></td>';
} else {
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
$eName = $row['name'];
$eDesc = $row['description'];
$eCont = $row['content'];
$id = $row['id'];
$elvl = $row['level'];
$ehp = $row['hp'];
$output .= '<tr><td><a href="http://xxxx.com/xxx?id=' .$id. '" onclick="document.linkform.submit();">'.$eName.'</a></td><td>'.$eDesc.'</td><td>'.$elvl.'</td><td>'.$ehp.'</td></tr>';
}
}
return $output;
}
}
我的functions.php文件中包含我的PDO连接。
答案 0 :(得分:0)
应该是:
$sql = "SELECT * FROM entries
WHERE name LIKE :searchq or
description LIKE :searchq or
content LIKE :searchq";
global $conn;
$stmt = $conn->prepare($sql);
确保已包含db配置文件。
答案 1 :(得分:0)
prepare()是PDO连接对象的方法,$ conn变量不是一个。它需要实例化为连接对象,如下所示:
$conn = new PDO('mysql:host=localhost;dbname=database', 'user', 'password');
或者,如果已经在“全局”范围内某处完成,您只需要在函数中声明:
global $conn;
这样做很好。该声明具有误导性。它只是执行脚本范围内的“全局”,并没有超越脚本执行。在脚本执行结束时销毁所有这些对象。这与会话无关。