【发布时间】:2014-08-19 18:19:58
【问题描述】:
我对 PHP PDO 比较陌生,在为包含给定字符串的所有国家/地区创建搜索功能并使用 Ajax 更新每个键输入时偶然发现了此错误。
现在我的错误是:
致命错误:在第 27 行调用 E:\Program files\wamp\www\Ajax\search.php 中未定义的方法 DatabaseHandler::prepare()
搜索.PHP
<?php
class SearchEngine{
private $html;
public function __construct($conn){
$this->html = '';
$this->html .= '<li class="result">';
$this->html .= '<a target="_blank" href="urlString">';
$this->html .= '<h3>nameString</h3>';
$this->html .= '</a>';
$this->html .= '</li>';
if (isset($_POST["query"])) {
$search_string = preg_replace("/[^A-Za-z0-9]/", " ", $_POST['query']);
}
else{
$this->html .= 'Something went wrong';
$search_string = 'a';
}
if (strlen($search_string) >= 1 && $search_string !== ' ') {
$query = 'SELECT * FROM country WHERE name LIKE "%' . $search_string . '%"';
$result = $conn->prepare($query);
$result->execute();
$result_array = $result->fetchAll();
foreach ($result_array as $result) {
$display_name = preg_replace("/".$search_string."/i", "<b class='highlight'>".$search_string."</b>", $result['name']);
$display_url = ''.urlencode($result['name']).'&lang=en';
$output = str_replace('nameString', $display_name, $html);
$output = str_replace('urlString', $display_url, $output);
echo($output);
}
}
}
} ?>
和我的数据库处理程序
<?php
class DatabaseHandler
{
public $conn;
public function openConnection($host, $user, $password, $database){
$this->conn = new PDO('mysql:host=localhost;dbname=ajax;charset=utf8', 'root', '');
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
} ?>
这一切都是从 index.PHP 中调用的
<?php
require_once("cgi_bin/connection.php");
require_once("Database_Handler.Class.php");
require_once("HTML_Page.Class.php");
require_once("search.php");
$hostname_conn = "localhost";
$database_conn = "ajax";
$username_conn = "root";
$password_conn = "";
$conn = new DatabaseHandler($hostname_conn, $username_conn, $password_conn, $database_conn);
$IndexPage = new page();
$SearchEngine = new SearchEngine($conn);
echo $IndexPage->render(); ?>
现在我发现你不能在类中调用 ::prepare 函数。但是如何解决这个问题?
一些注意事项:是的,我的代码需要一些改进,但我宁愿先让它工作,任何建议都非常欢迎。和 $_POST['query'];出于某种原因始终未设置,所以我现在将查询设置为“a”,但这是我以后可以自己查找/修复的错误。
非常欢迎任何帮助/评论等。谢谢
【问题讨论】:
-
请考虑构建一个更好的脚本。你试图做你需要做的事情的方式是可怕的。
-
你是在要求我构建一个更好的脚本,而这当然是我能做到的最好的了?
-
不。从“最好”这个词的任何定义来看,这都不是最好的。除了最好的错误。我不是想侮辱你,只是为了激励你,这样你就可以做得更多(因为你可以)