我一直在研究一个SQL项目。我有一个包含两列的表,还有一个搜索功能,要求用户以简单的形式输入用户名。然后我的php脚本回显与该用户名关联的全名。
以下是包含表单的HTML页面:
p
这是一个回复全名的php脚本:
<html>
<head>
<title>Search Contacts</title>
</head>
<p><body>
<h3>Search Contacts Details</h3>
<p>You may search either by first or last name</p>
<form method="post" action="search.php" id="searchform">
<input type="text" name="username">
<input type="submit" name="submit" value="Search">
</form>
</body>
答案 0 :(得分:2)
用户名是一个字符串,因此需要在引号中。
您在分配给$username
的行上也错过了分号,而您分配的值应为$_POST['username']
。
如果查询失败,您应该显示包含失败原因的错误消息。
您只回显最后匹配的用户名。您应该在循环内移动echo
语句。
要让LIKE
搜索名称中包含$username
的任何用户,您需要在%
使用的搜索字符串周围添加通配符LIKE
字符。
<?php
$con=mysqli_connect("localhost","root","hidden","users");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$username=$_POST['username'];
$sql="SELECT * FROM `users` WHERE `user` LIKE '%$username%'";
if ($result=mysqli_query($con,$sql))
{
// Get field information for all fields
while ($fieldinfo=mysqli_fetch_field($result))
{
$username =$fieldinfo ['username'];
echo $username;
}
}
else
{
die(mysqli_error($con));
}
mysqli_close($con);
?>
但是如果你学会使用准备好的查询会更好。这是用这种风格重写的代码。
<?php
$con=mysqli_connect("localhost","root","hidden","users");
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}
$username=$_POST['username'];
$sql="SELECT username FROM `users` WHERE `user` LIKE CONCAT('%', ?, '%')";
$stmt = mysqli_prepare($con, $sql);
mysql_bind_param($stmt, "s", $username);
if ($result=mysqli_execute($stmt))
{
mysqli_bind_result($stmt, $username);
// Get field information for all fields
while (mysql_fetch($stmt)) {
echo $username;
}
}
else
{
echo mysqli_error($con);
}
mysqli_close($con);
?>