php - 如何在 mysqli 中运行选择查询

标签 php mysqli

<分区>

我需要显示特定的记录,记录存在于数据库中,但它什么也没显示。这是我的代码。

 $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 时,而不是添加到数据库时)。

请考虑将其设为可接受的答案,以免新手偶然发现危险代码。

关于php - 如何在 mysqli 中运行选择查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35646375/

相关文章:

php - 如何在 <br/> 标签上分解字符串

PHP连接变量问题

php - 创建邮件列表 (PHP)

php - 我无法将消息发送给我的客户端使用 PHP、MySQL

php - 多对多配方数据库 SQL

php - 两个PHP网站实现单点登录的策略是什么?

php - 基于动态生成信息的 jQuery UI 对话框

php - 无法选择学生: Access denied for user '' @'localhost' to database 'student'

javascript - Mysqli/Ajax 如何在每个请求中加载多个结果?

php - 使用一个具有可变数量输入变量的 bind_param()