【发布时间】:2017-08-02 08:34:06
【问题描述】:
这段代码工作正常,但问题是它很慢,我认为这是因为每次我输入一个字母时它都会连接到数据库。有没有办法让它更快?我必须假设 db 表并不总是相同的,所以我不能只将结果添加到 var 并完成它。提前谢谢你。
另外,如果您认为这个 api 不好,我可以接受替代方案。
HMTL:
<label for="hint">Meds: </label>
<input id="hint">
JQuery:
$(function () {
$("#hint").autocomplete({
source: 'getMedicineNames.php'
});
});
PHP:
require 'connect.inc.php';
$mysql = mysqli_connect("$db_host", "$db_username", "$db_pass", "$db_name");
$name = isset($_GET['term']) ? $_GET['term'] : "";
if ($name!="") {
$sql = "SELECT MedicineName FROM medicinetypes WHERE MedicineName LIKE '%$name%'";
$res = mysqli_query($mysql, $sql);
$res = mysqli_fetch_all($res, MYSQLI_ASSOC);
foreach ($res as $row) {
$data[] = $row['MedicineName'];
}
echo json_encode($data);
}
【问题讨论】:
-
我只想说很明显,这段代码是不安全的,容易受到 sql 注入攻击。如果你从数据库中提取它会很慢,可悲的是没有办法解决这个问题。您可以做的一件事是从每个字母中提取一个项目,并至少让它快速开始,然后在您输入更多内容后进行更多搜索。
-
有没有办法避免安全问题?有没有办法说,在页面加载时将整个数据库放在一个 var 中,并将其传递给 api 以执行搜索客户端?
标签: php jquery autocomplete