【发布时间】:2017-09-05 23:58:18
【问题描述】:
我有一个当前能够根据用户输入自动完成的表单,它查询 MySQL 数据库并成功列出表中所有可能的匹配项并给出建议。现在我想处理不存在的行。我无法让我的 PHP 文件回显错误。这是我目前所拥有的:
我猜我的auto search function 在我的javascript 中main.php 我需要将错误消息返回到页面吗?
搜索.php
<?php
//database configuration
$host = 'user';
$username = 'user';
$password = 'pwd';
$name = 'name';
//connect with the database
$dbConnection = new mysqli($host,$username,$password,$name);
if(isset($_GET['term'])){
//get search term
$searchTerm = '%'.$_GET['term'].'%';
//get matched data from skills table
if($query = $dbConnection->prepare("SELECT * FROM nametbl WHERE name LIKE ? ORDER BY name ASC")) {
$query->bind_param("s", $searchTerm);
$query->execute();
$result = $query->get_result();
//$row_cnt = $result->num_rows;
//echo $row_cnt;
if($result -> num_rows){
while ($row = $result->fetch_assoc()) {
$data[] = $row['name'];
}
//return json data
echo json_encode($data);
mysqli_close($dbConnection);
}
else { echo '<pre>' . "there are no rows." . '</pre>'; }
}
else {
echo '<pre>' . "something went wrong when trying to connect to the database." . '</pre>';
}
}
?>
main.php
<div id="gatewayInput">
<form method="post">
<input type="text" id="name" name="name" placeholder="Name..."><br><br>
<?php
include("search.php");
?>
</div>
...
...
...
<script src ="../../../jqueryDir/jquery-3.2.1.min.js"></script>
<script src ="../../../jqueryDir/jquery-ui.min.js"></script>
<script type="text/javascript">
//auto search function
$(function() {
$( "#name" ).autocomplete({
source: 'search.php'
});
});
【问题讨论】:
-
您的代码易受 SQL 注入攻击,您需要修复此问题。
-
@Enstage 我的代码在哪里容易受到 SQL 注入的影响,如何做到这一点?
-
不返回结果的查询不是失败。您的 $query 变量将包含一个结果对象,除非您的查询实际上产生某种错误(如语法错误)
-
@PatrickEvans 我明白你的意思。让我尝试使用下面 Chris 建议的 num 行。
-
现在您应该检查
$query是否有错误,LIKE 语句的语法错误。您的$searchTerm变量应包含%,即$searchTerm = '%'.$_GET['term'].'%'。并在查询中有LIKE ?
标签: javascript php jquery mysqli