mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等...期望参数1为资源 [英] mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows etc... expects parameter 1 to be resource

查看:78
本文介绍了mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等...期望参数1为资源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I am trying to select data from a MySQL table, but I get one of the following error messages:

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

mysql_fetch_array() expects parameter 1 to be resource, boolean given

这是我的代码:

$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_ *和mysqli扩展名都将从各自的查询函数/方法中返回false.您需要测试该错误情况并进行相应处理.

A query may fail for various reasons in which case both the mysql_* and the mysqli extension will return false from their respective query functions/methods. You need to test for that error condition and handle it accordingly.

mysql_ *扩展名 :

mysql_* extension:

注意:不推荐使用 mysql_函数并已在php版本7中删除.

NOTE The mysql_ functions are deprecated and have been removed in php version 7.

在将$result传递给mysql_fetch_array之前,先进行检查.您会发现它是false,因为查询失败.请参阅 mysql_query 文档,以获取可能的返回值以及有关如何实现的建议.与他们打交道.

Check $result before passing it to mysql_fetch_array. You'll find that it's false because the query failed. See the mysql_query documentation for possible return values and suggestions for how to deal with them.

$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扩展
程序样式:

mysqli extension
procedural style:

$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-style :

$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 ) {
      ...


这些示例仅说明应该做什么(错误处理),而不是如何做到.输出HTML时,生产代码不应使用 or die ,否则(至少)将生成无效的HTML.此外,数据库错误消息也不应显示给非管理员用户,因为它披露太多信息.


These examples only illustrate what should be done (error handling), not how to do it. Production code shouldn't use or die when outputting HTML, else it will (at the very least) generate invalid HTML. Also, database error messages shouldn't be displayed to non-admin users, as it discloses too much information.

这篇关于mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows等...期望参数1为资源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆