如何搜索名称或类似关键字的内容以及预期会产生多少结果?
例如,当您搜索标记时,
你希望有这样的想法:
Mark Zuckerberg
Mark Hamil
Mark Fischbach
...
但是当我进行查询时,它只为我显示一个。
我试图使用许多不同的SQL子句和其他东西,但仍然给出了一个结果。顺便说一下,我使用 PDO 作为我的数据库处理程序。
这是我的代码:
<?php
require_once '../../assets/conn.db.php';
require_once '../../assets/init.php';
require_once '../../assets/main.func.php';
if($_POST){
$namesearch = $_POST['name'];
$sql = "SELECT * FROM `student_info` WHERE username LIKE ? OR username LIKE ?";
$checkstmt = $conn->prepare($sql);
$checkstmt->execute(array("%{$namesearch}%","%{$namesearch}%"));
$result = $checkstmt->fetch(PDO::FETCH_ASSOC);
if($result){
echo "
<table border='1' class='text-align: center'>
<tr>
<th>Name</th>
<th>Phone</th>
<th>Address</th>
<th>Username</th>
<th>Action</th>
</tr>
<tr>
<td>{$result['name']}</td>
<td>{$result['phone']}</td>
<td>{$result['address']}</td>
<td>{$result['username']}</td>
<td><a href='grades.php?user=".$result['StudentID']."'>+</a> Add Grades</td>
</tr>
</table> <br>
";
}
}
?>
<form method="post">
<input type="text" name="name" placeholder="Search for a student">
<input type="submit" value="Search!">
</form>
答案 0 :(得分:4)
sql查询是正确的,输出你必须迭代$ result的结果的所有元素。
示例:
while($data = $result->fetch_array())
{
echo $result["name"];
}
答案 1 :(得分:2)
您的查询会返回您需要的所有结果,但您只需获取单个数据。 K. O. Rolling先生为您提供了如何迭代结果的一般概念,让我们将其应用于您的确切问题:
require_once '../../assets/conn.db.php';
require_once '../../assets/init.php';
require_once '../../assets/main.func.php';
if($_POST){
$namesearch = $_POST['name'];
$sql = "SELECT * FROM `student_info` WHERE username LIKE ? OR username LIKE ?";
$checkstmt = $conn->prepare($sql);
$checkstmt->execute(array("%{$namesearch}%","%{$namesearch}%"));
$result = $checkstmt->fetch(PDO::FETCH_ASSOC);
echo "
<table border='1' class='text-align: center'>
<tr>
<th>Name</th>
<th>Phone</th>
<th>Address</th>
<th>Username</th>
<th>Action</th>
</tr>";
while($data = $checkstmt->fetch(PDO::FETCH_ASSOC)){
echo "
<tr>
<td>{$result['name']}</td>
<td>{$result['phone']}</td>
<td>{$result['address']}</td>
<td>{$result['username']}</td>
<td><a href='grades.php?user=".$data['StudentID']."'>+</a> Add Grades</td>
</tr>
";
}
echo "</table> <br>";
}
代码未经测试。在每次迭代的while
中,使用当前元素初始化$data
并对其进行逻辑评估。如果没有更多的元素,那么它将是假的,循环将退出。否则,它将获取该项并写入tr
。
进一步改善:
$sql = "SELECT * FROM `student_info` WHERE username LIKE ? OR username LIKE ?";
$checkstmt = $conn->prepare($sql);
$checkstmt->execute(array("%{$namesearch}%","%{$namesearch}%"));
请注意,你检查两次相同的东西,这不是很理想。改进:
$sql = "SELECT * FROM `student_info` WHERE username LIKE ?";
$checkstmt = $conn->prepare($sql);
$checkstmt->execute(array("%{$namesearch}%"));
此外,明智的做法是在选择中使用列列表而不是*。