我需要显示特定的记录,记录存在于数据库中,但它什么也没显示。这是我的代码。
$con=mysqli_connect("localhost","root","","test") or die("Connecting to MySQL failed");
$name=$_POST['uname'];
$query = "SELECT * FROM officedb WHERE name='.$name.'";
$data=mysqli_query($con,$query);
while($row=mysqli_fetch_array($data)){
echo $row['name'];
echo $row['lname'];
echo $row['department'];
}
.
是 concatenation operator .它用于将多个字符串或变量放在一起。在双引号内,PHP 解析变量,所以这不是必需的。此外,在单引号或双引号内,"."将被视为文字句点,而不是串联运算符。
但这不是我添加这个答案的原因......将帖子直接放入查询中会要求各种不良行为,这会使您的网络应用程序崩溃,导致您丢失数据,数据泄露或更差。研究 SQL 注入(inject)和 Little Bobby Tables。您已经在使用 MySQLi,这很好,但是把它带回家...
那么,应该怎么办呢?使用准备好的语句。
$name=$_POST['uname']; /* NEVER TRUST user input. This value
could be very dangerous!!! */
$con=mysqli_connect("localhost","root","","test") or die("Connecting to MySQL failed");
$stmt = $con->prepare("SELECT * FROM `officedb` WHERE name = ?");
$stmt->bind_param('s', $name);
$stmt->execute();
$data = $stmt->get_result();
while($row=mysqli_fetch_array($data)){
// I assume these came from user input too. Do not trust when printing.
echo htmlspecialchars($row['name']);
echo htmlspecialchars($row['lname']);
echo htmlspecialchars($row['department']);
}
参见 bind_param PHP Manual page想要查询更多的信息。此外,当打印回 html 时,您不应该相信用户输入。使用 htmlspecialchars帮助解决这个问题(打印到 html 时,而不是添加到数据库时)。
请考虑将其设为可接受的答案,以免新手偶然发现危险代码。