我试图从mysql表中选择数据,但收到以下错误消息之一:
mysql\u fetch\u 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'];
}
24条答案
按热度按时间fafcakar1#
有时会将查询作为
@mysql_query(your query);
egmofgnx2#
在运行查询之前,请确保没有使用db\u close()关闭数据库:
如果在脚本中使用多个查询,甚至包括包含查询或数据库连接的其他页面,那么
ocebsuys3#
当查询中出现导致失败的错误时,将显示此错误消息。它将在使用时显示:
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命令行或phpmyadmin之类的工具运行查询。如果您的查询中有语法错误,这将告诉您它是什么。
确保你的报价是正确的。查询或值周围缺少引号会导致查询失败。
确保你正在逃避你的价值观。查询中的引号可能会导致查询失败(同时也会导致sql注入。使用
mysql_real_escape_string()
为了逃避你的意见。确保你没有混合
mysqli_*
以及mysql_*
功能。它们不是同一事物,不能一起使用(如果你要选一个或另一个坚持mysqli_*
. 原因见下文。)其他提示
mysql_*
函数不应用于新代码。它们不再得到维护,社区也开始了弃用程序。相反,您应该学习准备好的语句,并使用pdo或mysqli。如果你不能决定,这篇文章将有助于选择。如果你想学习,这里有一个很好的pdo教程。72qzrwbm4#
如果您在这里尝试了所有方法,但都不起作用,那么您可能需要检查mysql数据库排序规则。我的被设定为瑞典的校勘。然后我把它改成了
utf8_general_ci
一切都很顺利。x7rlezfr5#
dwbf0jvd6#
由于有时数据库未被选中,请检查是否有选中的数据库
检查
然后进行下一步
bgtovc5b7#
试试这个
vwoqyblh8#
如果有一个用户名是唯一的,你可以用“=”来表示。没有必要喜欢。
您的查询将是:
4ktjp1zp9#
这里发生的错误是由于使用了单引号(
'
). 您可以将查询如下:它正在使用
mysql_real_escape_string
用于防止sql注入。虽然我们应该使用mysqli或pdoïumysql扩展来升级php版本(php5.5.0及更高版本),但是对于旧版本mysql_real_escape_string
会成功的。kkih6yb810#
你的代码应该是这样的
完成后,您将在屏幕上打印查询。在您的服务器上尝试此查询,看看是否产生所需的结果。大多数情况下,错误都出现在查询中。其余代码是正确的。
brjng4g311#
加引号
$username
. 与数值相反,字符串值必须用引号括起来。而且,使用
LIKE
条件如果你不使用通配符:如果你需要一个完全匹配的使用=
而不是LIKE
.o8x7eapl12#
首先,检查与数据库的连接。是否连接成功?
如果完成了,那么在那之后我就编写了这段代码,而且效果很好:
nhhxz33t13#
一个查询可能会因为各种原因而失败,在这种情况下mysql和mysqli扩展都会返回
false
从各自的查询函数/方法。您需要测试错误条件并相应地处理它。mysql扩展名:
注意mysql函数已经被弃用,在phpversion7中已经被删除。
检查
$result
在把它传给mysql_fetch_array
. 你会发现false
因为查询失败。看到了吗mysql_query
可能返回值的文档以及如何处理它们的建议。mysqli扩展
程序样式:
oo样式:
使用准备好的语句:
这些例子只是说明应该做什么(错误处理),而不是如何做。生产代码不应使用
or die
当输出html时,它将(至少)生成无效的html。此外,数据库错误消息不应该显示给非管理员用户,因为它会泄露太多信息。klr1opcd14#
可能有两个原因:
在调用mysql\u查询函数之前,您是否打开了与数据库的连接?我在你的代码里看不到。在进行查询之前使用mysql\u connect。看到了吗
php.net/manual/en/function.mysql-connect.php
变量$username在单引号字符串中使用,因此不会在查询中计算其值。查询肯定会失败。第三,查询结构易于sql注入。您可以使用事先准备好的声明来避免这种安全威胁。
6bc51xsx15#
使用单引号定义字符串,php不解析单引号分隔的字符串。为了获得变量插值,需要使用双引号或字符串串联(或两者的组合)。看到了吗http://php.net/manual/en/language.types.string.php 更多信息。
您还应该检查mysql\u query是否返回了有效的结果资源,否则fetch\u*、num\u rows等将无法处理结果,因为这不是结果!即:
http://us.php.net/manual/en/function.mysql-query.php 更多信息。