我已经进行了网站搜索,它没有回应任何结果,但它显示了有多少结果
这是代码:
<?php
$db = new mysqli('localhost','root','root','search');
if (isset($_GET['input'])) {
$keywords = $db->escape_string($_GET['input']);
$query = $db->query("
SELECT Name, ProjectNumber, Hazard, Datedone
FROM hira
WHERE Name LIKE '%{$keywords}%'
OR ProjectNumber LIKE '%{$keywords}%'
");
?>
<div class="result-count">
Found <?php echo $query->num_rows; ?> results
</div>
<?php
if ($query->num_rows) {
while ($r = $query->fetch_object()) {
}
?>
<div class="results">
<h3><?php echo $r->Hazard; ?></h3>
</div>
<?php
}
}
?>
<div class="results">
<h3><?php echo $r->Hazard; ?></h3>
</div>
当我搜索“Andreas”时 我得到的结果是“找到2个结果” 但实际结果没有显示
我做错了什么 提前致谢
答案 0 :(得分:1)
我不确定这是否是您的结果应该是什么样的,因为您的代码中存在一些错误。但这会给你表中的条目。
您的错误是直接关闭while
- 循环,因此您在实际使用之前将结果释放到$r
。
$db = new mysqli('localhost', 'root', 'root', 'search');
if (isset($_GET['input'])) {
$keywords = $db->escape_string($_GET['input']);
$query = $db->query("
SELECT Name, ProjectNumber, Hazard, Datedone
FROM hira
WHERE Name LIKE '%{$keywords}%'
OR ProjectNumber LIKE '%{$keywords}%'");
?>
<div class="result-count">
Found <?php echo $query->num_rows; ?> results
</div>
<?php
if ($query->num_rows) {
while ($r = $query->fetch_object()) {
?>
<div class="results">
<h3><?php echo $r->Hazard; ?></h3>
</div>
<?php
}
}
}
好一点就是这个解决方案。在您的代码中,您已escaping
input
,使用prepared statementes
仍然更安全:
$db = new mysqli('localhost', 'root', 'root', 'search');
if (isset($_GET['input'])) {
$keywords = "%" . $_GET['input'] . "%";
$query = $db->prepare("
SELECT Name, ProjectNumber, Hazard, Datedone
FROM hira
WHERE Name LIKE ?
OR ProjectNumber LIKE ?");
$query->bind_param("ss", $keywords, $keywords);
$query->execute();
$query->store_result();
?>
<div class="result-count">
Found <?php echo $query->num_rows; ?> results
</div>
<?php
$query->bind_result($name, $projectNumber, $hazard, $dateDone);
while ($query->fetch()) {
?>
<div class="results">
<h3><?php echo $hazard; ?></h3>
</div>
<?php
}
}