mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()/ mysql_num_rows等…期望参数1为资源


960

我正在尝试从MySQL表中选择数据,但收到以下错误消息之一:

mysql_fetch_array()期望参数1为资源,给定布尔值

这是我的代码:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

while($row = mysql_fetch_array($result)) {
    echo $row['FirstName'];
}

15
您可以使用:QUERY或die(mysql_error());获得更有用的eroor msg。
尼克2010年

123
还要注意:您的代码易于进行SQL注入您应该验证和/或转义用户输入。看一看mysql_real_escape_string永远不要信任用户数据。
Felix Kling 2010年

7
实际上,OP的代码将在MySQL服务器上引起语法错误,但至少它容易受到SQL注入的攻击,因为单引号没有变量插值。
szgal 2014年

4
@FelixKling我意识到这已经很老了,并且可能是当时最准确的方法,但是您的评论现在在一种方式上mysql_real_escape_string是危险的错误:SQL注入保护不是万无一失,也不是万无一失。它仍然容易受到多种攻击。(不,您从未说过它是完美的,但是您暗示它是唯一需要的解决方案。)据我所知,最好的解决方案是PDO。
基金莫妮卡的诉讼

2
加。将这个问题扩展到包括MySQLi和PDO是一个坏主意。他们每个人都有自己略有不同的语法和错误消息,并且完全可以有自己的问题。将所有内容组合成一个由三部分组成的庞大问题,这将使此问题变得不那么容易被Google接受,并迫使到达此处的人们浏览不相关的内容以获取所需内容。它也使下面的许多答案无效,并按照我们通常所应用的标准将这个问题“过于广泛”。我认为这是一团糟,但现在修复为时已晚。
Mark Amery

Answers:


667

查询可能由于各种原因而失败,在这种情况下,mysql_ *和mysqli扩展名都false将从它们各自的查询函数/方法中返回。您需要测试该错误情况并进行相应处理。

mysql_ *扩展名

注:mysql_功能已被弃用,并在PHP版本7已被删除。

请先检查一下,$result然后再传递给mysql_fetch_array。您会发现这是false因为查询失败。请参阅mysql_query文档以获取可能的返回值以及有关如何处理它们的建议。

$username = mysql_real_escape_string($_POST['username']);
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    die(mysql_error()); // TODO: better error handling
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

mysqli扩展
程序样式

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$result = mysqli_query($mysqli, "SELECT * FROM Users WHERE UserName LIKE '$username'");

// mysqli_query returns false if something went wrong with the query
if($result === FALSE) { 
    yourErrorHandler(mysqli_error($mysqli));
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
        ...

oo风格

$username = $mysqli->escape_string($_POST['username']);
$result = $mysqli->query("SELECT * FROM Users WHERE UserName LIKE '$username'");

if($result === FALSE) { 
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else {
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

使用准备好的语句:

$stmt = $mysqli->prepare('SELECT * FROM Users WHERE UserName LIKE ?');
if ( !$stmt ) {
    yourErrorHandler($mysqli->error); // or $mysqli->error_list
}
else if ( !$stmt->bind_param('s', $_POST['username']) ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else if ( !$stmt->execute() ) {
    yourErrorHandler($stmt->error); // or $stmt->error_list
}
else {
    $result = $stmt->get_result();
    // as of php 5.4 mysqli_result implements Traversable, so you can use it with foreach
    foreach( $result as $row ) {
      ...

这些示例仅说明应该执行的操作(错误处理),而没有说明如何执行。or die输出HTML时不应使用生产代码,否则它将(至少)生成无效的HTML。另外,数据库错误消息不应显示给非管理员用户,因为它会显示过多信息


9
是的,但是如果查询失败,请使用die()差不多。
2ndkauboy

28
我打算为OP设计一个完整的错误处理机制,但是认为这可能超出了我的回答范围。
爱德华·戴尔

@ scompt.com是的,其他答案中也有涉及。我想我只是想指出一点,因为这是关于高可见度问题的公认答案,除了关于如何在将来正确捕获错误的(出色)建议之外,它(IMHO)还应实际回答特定问题(即解释为什么在这种情况下会出错)。
Sepster

2
代替if($result === FALSE)您可以使用if(! $result)。如果我错了,请纠正我
anestv

1
mysql_query():不建议使用mysql扩展,以后将删除:mysqli
Greg

165

当查询中出现错误导致失败时,将显示此错误消息。使用时将显示出来:

  • mysql_fetch_array/mysqli_fetch_array()
  • mysql_fetch_assoc()/mysqli_fetch_assoc()
  • mysql_num_rows()/mysqli_num_rows()

注意:如果您的查询没有行影响,则不会出现此错误。只有语法无效的查询才会产生此错误。

故障排除步骤

  • 确保已将开发服务器配置为显示所有错误。您可以将其放在文件顶部或配置文件中:error_reporting(-1);。如果您有任何语法错误,这将为您指出。

  • 使用mysql_error()mysql_error()将报告执行查询时MySQL遇到的任何错误。

    用法示例:

    mysql_connect($host, $username, $password) or die("cannot connect"); 
    mysql_select_db($db_name) or die("cannot select DB");
    
    $sql = "SELECT * FROM table_name";
    $result = mysql_query($sql);
    
    if (false === $result) {
        echo mysql_error();
    }
  • 从MySQL命令行或phpMyAdmin之类的工具运行查询。如果查询中存在语法错误,这将告诉您它是什么。

  • 确保您的报价正确。查询周围缺少引号或值可能会导致查询失败。

  • 确保您逃避了自己的价值观。查询中的引号可能会导致查询失败(也使您不愿接受SQL注入)。使用mysql_real_escape_string()逃脱你的输入。

  • 确保您没有混音mysqli_*mysql_*功能。它们不是同一件事,不能一起使用。(如果您要选择一个或另一个,mysqli_*请选择。请参阅下面的原因。)

其他技巧

mysql_*函数不应用于新代码。它们已不再维护,社区已开始弃用过程。相反,您应该了解准备好的语句,并使用PDOMySQLi。如果您不能决定,本文将有助于选择。如果您想学习,这里有个不错的PDO教程


1
今天遇到这个问题,stackoverflow.com / q / 43804651/1415724和其他类似的问题最近出现;我认为可能有必要将答案更新为包含诸如“该错误也可能是由于不使用mysql_query()/ mysqli_query($connection)等执行查询所引起的”。; 有什么想法吗?由于在此问答中没有其他答案提到了这一点。
Funk 40 Niner's

111

出现错误是由于使用了单引号(')。您可以这样查询:

mysql_query("
SELECT * FROM Users 
WHERE UserName 
LIKE '".mysql_real_escape_string ($username)."'
");

mysql_real_escape_string用于防止SQL注入。虽然我们应该使用MySQLi或PDO_MYSQL扩展名作为PHP的升级版本(PHP 5.5.0及更高版本),但是对于较旧的版本mysql_real_escape_string则可以解决问题。


5
为什么要通过字符串串联添加噪声,而不是仅将变量放入查询字符串中?
Matteo Riva

1
@Matteo Riva是的,但是我认为这是将变量与字符串分开的更简洁的方法。:)
尼克

60

scompt.com所述,查询可能会失败。使用以下代码获取查询错误或正确的结果:

$username = $_POST['username'];
$password = $_POST['password'];

$result = mysql_query("
SELECT * FROM Users 
WHERE UserName LIKE '".mysql_real_escape_string($username)."'
");

if($result)
{
    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
} else {
    echo 'Invalid query: ' . mysql_error() . "\n";
    echo 'Whole query: ' . $query; 
}

有关更多信息,请参见文档mysql_query()

实际错误是单引号,因此$username未解析变量。但是您应该真正mysql_real_escape_string($username)避免使用SQL注入。


52

在周围加上引号$username。与数字值相反,字符串值必须用引号引起来。

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '$username'");

另外,LIKE如果您不使用通配符,则没有必要使用条件:如果您需要完全匹配,请使用=代替LIKE


1
如果$ username是:“'; DROP TABLES;”怎么办??那是使用准备好的语句和绑定值的优势,我认为提问者想保留这些值。
HoldOffHunger

42

请检查一次选定的数据库是否不是,因为有时未选择数据库

校验

mysql_select_db('database name ')or DIE('Database name is not available!');

在MySQL查询之前,然后转到下一步

$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

f($result === FALSE) {
    die(mysql_error());

40

您的代码应该是这样的

$username = $_POST['username'];
$password = $_POST['password'];
$query = "SELECT * FROM Users WHERE UserName LIKE '$username'";
echo $query;
$result = mysql_query($query);

if($result === FALSE) {
    die(mysql_error("error message for the user")); 
}

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

完成此操作后,您将在屏幕上打印查询。在您的服务器上尝试此查询,看看它是否产生期望的结果。在大多数情况下,错误是在查询中。其余代码是正确的。


3
不要使用此代码。它对SQL注入攻击开放。
布拉德2014年

34
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

您使用单引号定义字符串,而PHP不会解析单引号分隔的字符串。为了获得变量插值,您将需要使用双引号或字符串串联(或其组合)。有关更多信息,请参见http://php.net/manual/en/language.types.string.php

另外,您还应检查mysql_query是否返回了有效的结果资源,否则fetch _ *,num_rows等将对结果不起作用,因为这不是结果!IE浏览器:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');

if( $result === FALSE ) {
   trigger_error('Query failed returning error: '. mysql_error(),E_USER_ERROR);
} else {
   while( $row = mysql_fetch_array($result) ) {
      echo $row['username'];
   }
}

有关更多信息,请访问http://us.php.net/manual/en/function.mysql-query.php


2
即使添加引号,也不要使用此代码。它对SQL注入攻击开放。
布拉德2014年

33

此查询应该工作:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");
while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

问题是单引号,因此您的查询失败并返回FALSE,并且您的WHILE循环无法执行。使用%可以匹配包含字符串的任何结果(例如SomeText- $ username-SomeText)。

这仅仅是对问题的答案,您应该实现其他文章中提到的内容:错误处理,使用转义字符串(用户可以在字段中键入任何内容,并且必须确保它不是任意代码),使用 PDO代替mysql_connect现在已被描述。


28
$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'") or die(mysql_error());

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

有时将查询抑制为 @mysql_query(your query);


2
不要使用此代码。它对SQL注入攻击开放。
布拉德2014年

27

如果您在这里尝试了所有操作,但没有成功,则可能需要检查MySQL数据库排序规则。我的被​​定为瑞典人整理。然后,我将其更改为utf8_general_ci,一切都变成了齿轮。


25
$query = "SELECT Name,Mobile,Website,Rating FROM grand_table order by 4";

while( $data = mysql_fetch_array($query))
{
    echo("<tr><td>$data[0]</td><td>$data[1]</td><td>$data[2]</td><td>$data[3]</td></tr>");      
}

代替使用WHERE查询,您可以使用此ORDER BY查询。使用查询要比这好得多。

我已经完成了此查询,并且没有收到像参数或布尔值这样的错误。


htmlspecialchars()在HTML上下文中使用任意数据时,请记住使用。否则,当在数据中使用保留字符时,可能会创建有效的HTML。
布拉德

25

尝试此操作,它必须可以工作,否则您需要打印错误以指定问题

$username = $_POST['username'];
$password = $_POST['password'];

$sql = "SELECT * from Users WHERE UserName LIKE '$username'";
$result = mysql_query($sql,$con);

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

8
1)可以广泛使用SQL注入,2)不包含错误处理,这会导致OP发生错误。
deceze

+1。@deceze是的,它是敞开的。但是,不再是OP或接受的应答者的代码;-)并不是OP的代码中缺乏错误处理导致错误的原因……这是错误,并且此答案至少尝试解决该问题(通过将单个LIKE表达式中字符串文字的引号)。
Sepster

1
+1请在LIKE和'$ username'之间添加一个空格,除SQL注入外,其余看起来都很好。为什么不使用=而不是LIKE运算符用户名必须完全匹配
asim-ishaq

21

可能有两个原因:

  1. 在调用mysql_query函数之前,您是否已打开与数据库的连接?我在您的代码中看不到。进行查询之前,请使用mysql_connect。看到php.net/manual/en/function.mysql-connect.php

  2. 变量$ username在单引号字符串内使用,因此不会在查询内评估其值。查询肯定会失败。

第三,查询的结构易于进行SQL注入。您可以使用准备好的语句来避免这种安全威胁。


20

请尝试以下代码。它可能工作正常。

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName ='$username'");

while($row = mysql_fetch_array($result))
{
    echo $row['FirstName'];
}

4
此代码需要进行SQL注入,因此不应使用。
布拉德

15

去你的config.php。我有同样的问题。验证用户名和密码,并且sql select与配置名称相同。


15

不要使用已描述的mysql_ *函数(在PHP 5.5中描述的函数将在PHP 7中删除)。你可以用mysqlipdo做到这一点

这是完整的选择查询

<?php
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT id, firstname, lastname FROM MyGuests";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        // code here 
    }
} else {
    echo "0 results";
}
$conn->close();
?>

您的帖子不涉及该问题解决的问题,这些问题是无效的查询和错误的错误报告。这篇文章是题外话。
Paul Spiegel

14
<?php
    $username = $_POST['username'];
    $password = $_POST['password'];
    $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".$username."'");

    while($row = mysql_fetch_array($result))
    {
        echo $row['FirstName'];
    }
?>

并且,如果有一个具有唯一用户名的用户,则可以使用“ =”。不需要喜欢。

您的查询将是:

mysql_query("SELECT * FROM Users WHERE UserName ='".$username."'");

3
此代码对SQL注入开放,不应该使用。
布拉德

@AnujGarg此代码接受直接输入并将其连接到查询中。有人可以在发布数据中编写自己的SQL,username它将被执行。
布拉德(Brad)

那么,如何防止代码被SQL注入呢?
Anuj Garg,2015年

14

在MySQL查询之前添加连接字符串变量。例如,$connt在此代码中:

$results = mysql_query($connt, "SELECT * FROM users");

1
这没有解决问题中的问题。这也是错误的,并且会引发另一个错误。
Paul Spiegel

12

每当你得到...

“警告:mysqli_fetch_object()期望参数1为mysqli_result,给定布尔值”

...这很可能是因为您的查询有问题。的prepare()query()可能会返回FALSE(布尔),但这种通用的失败消息不离开你在多线索的方式。您如何找出查询的问题?你

首先,请确保已打开错误报告并使其可见:将这两行添加到文件开头(紧接在您的开始<?php标记之后):

error_reporting(E_ALL);
ini_set('display_errors', 1);

如果您在php.ini中设置了错误报告,则无需担心。只要确保您能正确处理错误,并且永远不要向用户透露任何问题的真正原因。向公众揭示真正的原因可以是那些想要损害您的站点和服务器的人的金色雕版邀请。如果您不想将错误发送到浏览器,则可以随时监视Web服务器错误日志。日志位置因服务器而异,例如,在Ubuntu上,错误日志通常位于/var/log/apache2/error.log。如果您正在Linux环境中检查错误日志,则可以tail -f /path/to/log在控制台窗口中使用它来实时查看错误或创建错误。

一旦您不了解标准错误报告,就可以在数据库连接和查询中添加错误检查,这将为您提供有关发生的问题的更多详细信息。看一下此示例,其中列名不正确。首先,返回一般致命错误消息的代码:

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();

该错误是一般性错误,对您解决正在发生的事情不是很有帮助。

通过使用几行代码,您可以获得非常详细的信息,您可以使用这些信息立即解决问题。检查prepare()语句的真实性,如果这很好,则可以继续进行绑定和执行。

$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
    $query->bind_param('s', $definition);
    $query->execute();
    // any additional code you need would go here.
} else {
    $error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
    // handle error
}

如果出现问题,您可以吐出一条错误消息,直接将您带到问题所在。在这种情况下,foo表中没有列,解决该问题是微不足道的。

如果选择,可以将此检查包括在函数或类中,并通过如前所述优雅地处理错误来扩展它。


2
怎么写“只要确保您能正确处理错误,并且永远不要向用户透露任何问题的真正原因”。而echo $error;在一个帖子?
Paul Spiegel

感谢@PaulSpiegel的注意。自从我写或重新回答答案以来已经有一段时间了,而我却错过了回声。
周杰伦·布兰查德

11
<?php
      $username = $_POST['username'];
       $password = $_POST['password'];

     $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".mysql_real_escape_string($username)."'")or die(mysql_error());
while($row=mysql_fetch_array($result))
  {
 echo $row['FirstName'];
 }
 ?>

11

尝试这个

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysqli_query('SELECT * FROM Users WHERE UserName LIKE $username');

if($result){
while($row = mysqli_fetch_array($result))
{
    echo $row['FirstName'];
}
}

4
@panjehra mysql_ *现在已被描述,将从php 7中删除。请改用mysqli_ *
Manoj Kumar,

9

首先,检查您与数据库的连接。是否成功连接?

如果完成了,那么之后我就编写了这段代码,并且效果很好:

if (isset($_GET['q1mrks']) && isset($_GET['marks']) && isset($_GET['qt1'])) {
    $Q1mrks = $_GET['q1mrks'];
    $marks = $_GET['marks'];
    $qt1 = $_GET['qt1'];

    $qtype_qry = mysql_query("
        SELECT *
        FROM s_questiontypes
        WHERE quetype_id = '$qt1'
    ");
    $row = mysql_fetch_assoc($qtype_qry);
    $qcode = $row['quetype_code'];

    $sq_qry = "
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        ORDER BY RAND() LIMIT $Q1mrks
    ";
    $sq_qry = mysql_query("
        SELECT *
        FROM s_question
        WHERE quetype_code = '$qcode'
        LIMIT $Q1mrks
    ");
    while ($qrow = mysql_fetch_array($sq_qry)) {
        $qm = $qrow['marks'] . "<br />";
        $total += $qm . "<br />";
    }
    echo $total . "/" . $marks;
}

2
不要使用此代码。它对SQL注入攻击开放。
布拉德2014年

9

在运行查询之前,请确保不使用db_close()关闭数据库:

如果您在脚本中使用多个查询,甚至包括其他包含查询或数据库连接的页面,那么在任何地方都可能使用db_close()来关闭数据库连接,因此请确保不要在脚本中执行此错误。


8

如果检查时没有出现MySQL错误,请确保已正确创建数据库表。这发生在我身上。查找任何不需要的逗号或引号。


7

首先检查您的连接。

然后,如果要从数据库中获取确切的值,则应编写:

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName =`$usernam`");

或者,您想获取LIKE值的类型,则应编写:

$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '%$username%'");

3
此代码对SQL注入开放,不应该使用。
布拉德

6

您还可以$result在执行fetch数组之前检查是否失败了

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE $username');
if(!$result)
{
     echo "error executing query: "+mysql_error(); 
}else{
       while($row = mysql_fetch_array($result))
       {
         echo $row['FirstName'];
       }
}

3
不要使用此代码。它对SQL注入攻击开放。
布拉德2014年

但是,如果代码有效,我认为您应该编辑代码并输入所需的过滤器,而不是对代码进行严厉惩罚。
user28864 2014年

简单使用过滤器无法解决此代码的问题。最好的解决方案是对PDO或类似的对象使用准备好的/参数化的查询。我看不出要解决的任何问题,因为正确的答案已在此处发布。理想情况下,此答案将被删除。但是,欢迎您修正您的答案,如果正确的话,我会很乐意为它投票。
布拉德2014年

好吧,如果您认为答案不值得考虑,可以继续阅读。但是,我认为这个社区的重点是分享和贡献知识。如果您有其他东西要分享,而不是让别人失望。
user28864 2014年

2
您是对的,这个社区的全部重点是分享知识。这就是为什么在我的投票书中添加了解释,并进一步解释了为什么您的过滤建议不够充分的原因。我非常想提醒您,以及其他找到您答案的人,上面的代码是不安全的。每个人最好学习正确的方法,而不是永久保留不良代码。而且,我无法删除您的答案,也不会删除。如果您选择这样做,则取决于您。
布拉德(Brad)2014年

4

通常,当数据库连接失败时会发生错误,因此请确保连接数据库或包括数据库文件。

include_once(db_connetc.php');

要么

// Create a connection
$connection = mysql_connect("localhost", "root", "") or die(mysql_error());

//Select database
mysql_select_db("db_name", $connection) or die(mysql_error());

$employee_query = "SELECT * FROM employee WHERE `id` ='".$_POST['id']."'";

$employee_data = mysql_query($employee_query);

if (mysql_num_rows($employee_data) > 0) {

    while ($row = mysql_fetch_array($employee_data)){
        echo $row['emp_name'];
    } // end of while loop
} // end of if
  • 最佳实践是在sqlyog中运行查询,然后将其复制到您的页面代码中。
  • 始终将查询存储在变量中,然后回显该变量。然后传递给mysql_query($query_variable);

2
1)您不知道我是否对此处的任何答案(上下)进行投票。2)正如我在第一句话中解释的那样;您的答案没有提到问题(布尔值传递给mysql_fetch_array),并且您遇到语法错误
Phil

2
两个代码示例中的引号均不正确。应用于第二个代码块的语法突出显示是有毛病的死胡同
菲尔

4
此代码需要进行SQL注入,因此不应使用。@EngrZardari如果您在生产系统上使用此代码,则毫无疑问,您已经被黑客入侵,应该使用带有PDO或类似参数的准备好的/参数化的查询来纠正这种情况。有一些自动程序已经对这些漏洞进行了自动测试。
布拉德2014年

1
@EngrZardari关于您“没有任何错误,我已经在此处粘贴了当前正在使用的代码。” 在上面发表评论。我更正了查询中缺少的报价。那将引发(PHP)解析错误。
Funk 40 Niner

2

试试这个代码可以正常工作

将post变量分配给该变量

   $username = $_POST['uname'];

   $password = $_POST['pass'];

  $result = mysql_query('SELECT * FROM userData WHERE UserName LIKE $username');

if(!empty($result)){

    while($row = mysql_fetch_array($result)){
        echo $row['FirstName'];
     }
}

3
此代码容易受到SQL注入攻击,因此不应使用。
布拉德

1

由于$ username是一个php变量,我们需要将其作为字符串传递给mysqli,因此由于在查询中u以单引号开头,因此我们将使用双引号,单引号和句号来表示(“'。$ username。 '“)如果您以双引号开头,则您将反引号('”。$ username。“')。

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query('SELECT * FROM Users WHERE UserName LIKE "'.$username.'"');

while($row = mysql_fetch_array($result))
     {
      echo $row['FirstName'];
     }

$username = $_POST['username'];
$password = $_POST['password'];
$result = mysql_query("SELECT * FROM Users WHERE UserName LIKE '".$username."' ");

while($row = mysql_fetch_array($result))
     {
      echo $row['FirstName'];
     }

但是Mysql的使用已贬值很多,请改用PDO。它简单但很安全


但是Mysql的使用已经贬值了。您可以改用PDO。让我给您一个登录示例。
丹尼斯·基普图根

2
密码永远都不能以纯文本格式存储,要利用PHP内置的功能来处理密码的哈希和验证哈希的密码!
SpacePhoenix
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.