Php 如何在mysqli中运行select查询

Php 如何在mysqli中运行select查询,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); wh

我需要显示特定的记录,记录存在于数据库中,但它没有显示任何内容。这是我的密码

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

您将
$name
变量设置为错误,只需更改:

$query = "SELECT * FROM officedb WHERE name='.$name.'";
使用此选项:

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

您的查询如下所示:

$query = "SELECT * FROM officedb WHERE name = '$name'";
SELECT * FROM officedb WHERE name = '.test.'
如我所建议,更改后的查询应为:

SELECT * FROM officedb WHERE name = 'test'
是最新版本。它用于将多个字符串或变量放在一起。在双引号内,PHP解析变量,所以这不是必需的。此外,在单引号或双引号中,“.”将被视为文字句点,而不是串联运算符

但这不是我添加这个答案的原因。。。将帖子直接放到查询中就是询问各种不良行为,这些行为会使web应用程序崩溃、导致数据丢失、数据泄露或更糟。研究SQL注入和小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']);
}
有关更多信息,请参阅。此外,在打印回html时,不应信任用户输入。用于帮助(打印到html时,而不是添加到DB时)


请考虑将此作为可接受的答案,这样新来者就不会碰到危险的代码。

<代码> ECHER$Que= =“从Office B中选择*,其中name=`.$Name”“”;代码>然后在php中运行查询myadminany error r u getting??user3113899-使用正确的方法处理mysql。您的代码容易受到SQL注入攻击。阅读并使用它们。你甚至不必这样做:`。。。name='$name'”,`用
name=“”就够了$试验
@isnisn:我的朋友,name是string,你需要在这里加引号:)@isnisn:如果$name是int,那么不需要使用引号,有什么混淆吗?可能取决于你的设置和sql_模式-但是我真的不需要
'
在我的PHP5.4+中使用带PDO的mysql 5.6.24进行concats时:)。当然,如果我写查询
选择。。。。。。其中name='string'
这是必须的。但是,如果我在OP的场景中具体说明这个解决方案,它会直接接受表单输入,并将其抛出到查询字符串中,而不进行任何检查,则不会。这是可怕的不安全,不应该被接受的答案。