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 等...期望参数1是资源的处理方法,这篇教程是从别的地方看到的,然后加了一些国外程序员的疑问与解答,希望能对你有所帮助,好了,下面开始学习吧。

mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数1是资源 教程 第1张

问题描述

我正在尝试从 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 ) {
  ...

:

$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.此外,不应向非管理员用户显示数据库错误消息,因为它 披露太多信息.

好了关于mysql_fetch_array()/mysql_fetch_assoc()/mysql_fetch_row()/mysql_num_rows 等...期望参数1是资源的教程就到这里就结束了,希望趣模板源码网找到的这篇技术文章能帮助到大家,更多技术教程可以在站内搜索。