如何在mysqli中运行select查询

时间:2016-02-26 07:57:23

标签: php mysqli

我需要显示特定的记录,记录存在于db中,但它没有显示任何内容。我的代码是。

 $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'];
}

2 个答案:

答案 0 :(得分:2)

.concatenation operator。它用于将多个字符串或变量放在一起。在双引号内,PHP解析变量,所以这不是必需的。此外,在单引号或双引号内,"。"将被视为文字句点,而不是连接操作符。

但这并不是我添加此答案的原因...直接在查询中添加帖子会要求各种不良行为,这会导致您的Web应用程序崩溃,从而导致数据丢失,数据受损,或更糟。研究SQL注入和Little Bobby表。你已经使用了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时,而不是在添加到数据库时)。

请考虑将此作为接受的答案,以便新手不会偶然发现危险的代码。

答案 1 :(得分:0)

你是$name变量的错误,只需更改:

$query = "SELECT * FROM officedb WHERE name='.$name.'";

$query = "SELECT * FROM officedb WHERE name = '$name'";

您的查询如下:

SELECT * FROM officedb WHERE name = '.test.'

更改后,我建议查询应该是:

SELECT * FROM officedb WHERE name = 'test'