通过PHP进行SQL查询

时间:2016-01-29 23:49:12

标签: php html mysql

我一直在研究一个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> 

1 个答案:

答案 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);
?>