【发布时间】:2023-03-23 19:40:02
【问题描述】:
我正在尝试从 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'];
}
【问题讨论】:
-
你可以使用:: QUERY or die(mysql_error()); 获得更有用的 eroor msg;
-
还有一个强制性说明:您的代码很容易出现SQL injection。您应该验证和/或转义用户输入。看看
mysql_real_escape_string。 永远不要相信用户数据。 -
其实OP的代码会在MySQL服务器上造成语法错误,但至少它不容易容易受到SQL注入的影响,因为单引号没有变量插值。
-
@FelixKling 我意识到这已经很老了,而且可能是当时最准确的,但你的评论现在在一个方面是危险的错误:
mysql_real_escape_string不是全部和结束-所有的SQL注入保护;它仍然容易受到许多攻击。 (不,你从未说过它是完美的,但你暗示它是唯一需要的解决方案)据我所知,现在最好的解决方案是 PDO。 -
嘎。将此问题扩展到包括 MySQLi 和 PDO 是一个坏主意。他们每个人都有自己稍微不同的语法和错误消息,他们很可能有自己的问题。将所有内容组合成一个巨大的由三部分组成的问题只会降低 Google 的可用性,并迫使到达这里的人通过不相关的内容来获得他们想要的东西。它也使下面的许多答案无效,并按照我们通常适用的标准使这个问题“过于宽泛”。在我看来,这是一团糟,但现在修复为时已晚。