当前位置: 首页 > 面试题库 >

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

祁博涛
2023-03-14
问题内容

我正在尝试从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'];
}

问题答案:

查询可能由于各种原因而失败,在这种情况下,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。另外,数据库错误消息不应显示给非管理员用户,因为它会显示过多信息。



 类似资料:
  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: mysql_fetch_array,mysql_fetch_assoc,mysql_fetch_object 我想要一个可以将结果集当前行中的字段返回到关联数组并将结果指针移至下一行的函数。 混淆之间 我应该使用哪一个?任何帮助,将不胜感激。谢谢。 问题答案: 注 :使用的功能被认为是 过时 ,你应该使用的东西,提供了更好的安全

  • 问题内容: 我不明白,我在这段代码中没有看到任何错误,但是有这个错误,请帮助: mysql_fetch_array()期望参数1是资源问题 我只是试图在表单中加载数据,但不知道为什么会出现该错误。这里可能有什么错误? 问题答案: 调用mysql_query之后,您没有执行 错误检查 : 万一失败,它将返回一个值。当您将此传递给函数(期望使用)时,我们会收到此错误。

  • 问题内容: 我不明白,我在这段代码中没有看到任何错误,但是有这个错误,请帮助: mysql_fetch_array()期望参数1是资源问题 我只是想在表单中加载数据,但不知道为什么会出现该错误。这里可能有什么错误? 问题答案: 调用mysql_query之后,您没有执行 错误检查 : 万一失败,它将返回一个值。当您将此传递给函数(要求)时,我们会收到此错误。

  • 问题内容: 每当我运行此命令时,我都会收到此错误: 编码: 问题答案: 那是因为mysql_query有时返回布尔值false(查询错误)。您需要检查一下: 上面的代码写得不好,不推荐使用。在实际项目中使用带有异常的PDO。

  • 问题内容: 这个问题已经在这里有了答案 : mysql_fetch_array()/ mysql_fetch_assoc()/ mysql_fetch_row()/ mysql_num_rows等…期望参数1为资源 (31个答案) 2年前关闭。 我有两个班和。继承于。当我要显示用户数据库中的所有用户时,我看到消息: mysql_fetch_array()期望参数1为资源,给定字符串。 感谢您的任何

  • 问题内容: 这个问题已经在这里有了答案 : 7年前关闭。 可能重复: mysql_fetch_array()期望参数1为资源,在select中给出布尔值 警告:mysql_affected_rows()期望参数1为资源,在第20行的C:\ wamp \ www \ a \ l \ forget.php中给出布尔值 问题答案: 至 并再次运行 然后 至 哦,是的,而且还有引号