【问题标题】:Fix mysql_num_rows() expects parameter 1 to be resource [closed]修复 mysql_num_rows() 期望参数 1 是资源 [关闭]
【发布时间】:2014-05-12 11:35:50
【问题描述】:

当我尝试将 mysql 数据导入表时,我得到mysql_num_rows() expects parameter 1 to be resource。编码有什么问题并且正确使用了mysql和mysqli?错误是针对$num = mysql_num_rows($result); 行。我很确定问题是 $result 但我不知道如何解决它。

    <?php

 $connection=mysqli_connect("localhost"/*hostname*/,
                          "username"/*username*/,
                          "password"/*password*/,
                          "dbname"/*database name*/);
$query = "SELECT * FROM table";
$result = mysqli_query($query);
$num = mysqli_num_rows($result);
mysqli_close();

$i=0;
while ($i < $num) {
$f1=mysqli_result($result,$i,"rowa");
$f2=mysqli_result($result,$i,"rowb");
$f3=mysqli_result($result,$i,"rowc");
$f4=mysqli_result($result,$i,"rowd");
$f5=mysqli_result($result,$i,"rowe");        ?>
            <table>
            <tr>
                 <td>a</td>
                 <td>b</td>
                 <td>c</td>
                 <td>d</td>
                 <td>e</td>
            </tr>
            <tr>
                <td>
<font face="Arial, Helvetica, sans-serif"><?php echo $f1; ?></font>
</td>
<td>
<font face="Arial, Helvetica, sans-serif"><?php echo $f2; ?></font>
</td>
<td>
<font face="Arial, Helvetica, sans-serif"><?php echo $f3; ?></font>
</td>
<td>
<font face="Arial, Helvetica, sans-serif"><?php echo $f4; ?></font>
</td>
<td>
<font face="Arial, Helvetica, sans-serif"><?php echo $f5; ?></font>
</td>           </tr>

            </table>
            <?php } ?>  

用户名、密码、数据库和表名不是代码中使用的实际名称。

【问题讨论】:

  • 通过确保您有一个有效的数据库连接,并且您的查询语句是正确的
  • 旁注:表格是一个保留字。用反引号括起来。
  • 我没有经历所有这些麻烦来帮助您在your other question 发布一个答案让您回来发布另一个。您基本上重复发布了相同的问题。
  • "错误是 $num = mysql_num_rows($result);" 它不在你的代码体中。你有$num = mysqli_num_rows($result);WTF?

标签: php html mysql mysqli


【解决方案1】:

这很容易解决:仔细查看您的第一行:

mysqli_connect();

使用了 mysqli_* 扩展名,这是应该的,但您随后会继续调用各种已弃用 mysql_* 函数。只需将这些调用更改为更现代且未弃用的 mysqli_* 对应对象即可。

其他问题包括您过早调用mysqli_close(关闭连接后,您仍然尝试使用数据库结果)。
而且您甚至没有正确调用mysqli_close:该函数要求您将数据库连接作为参数传递:

mysqli_close($connection);

花点时间reading the manual

关于您的其他问题:查询使用保留关键字:table,在 MySQL 中,应该转义:

$result = mysqli_query(
    $connection,//pass mysqli connection as first param
    'SELECT * FROM `table`'
);
if (!$result)
    exit('Query failed');//ALWAYS CHECK RETURN VALUES!!
$count = mysqli_num_rows($result);
//and so on

【讨论】:

  • mysqli_result 这是正确的。感谢您提供手册的链接。为什么我看过的网站都没有链接到这个。
  • @TheOkayMan:当然我知道如何解决这个问题。我链接到mysqli_* 的手册,只需查看文档:您传递给该函数的第一个参数是资源(mysqli_query 的返回值是mysqli_result 对象,这是您需要传递的)
【解决方案2】:

你正在混合使用 mysql 和 mysqli 函数

将你的连接函数替换为mysql_connect()

或者甚至更好,因为不推荐使用 mysql_ 函数尝试将所有内容更改为 mysqli 或使用 PDO

【讨论】:

  • 可怕的建议! mysqli_connect 的使用是唯一应该保持原样的东西。不要用糟糕的、已弃用的版本替换好的代码!
  • @EliasVanOotegem 我正在编辑我的答案!!
  • 如果您在我发布评论时正在编辑它,那么我看不到它是理所当然的。你不必大喊大叫。此外:您仍然建议更改mysqli_connect。当然,你说最好不要这样做,但不要告诉人们他们仍然可以使用mysql_* 函数,因为那个扩展必须死
【解决方案3】:

这个错误意味着你的查询失败,因为你混合了 mysql_* 和 mysqli_*

试试这个:

 $connection=mysqli_connect("localhost"/*hostname*/,
                          "username"/*username*/,
                          "password"/*password*/,
                          "dbname"/*database name*/);
$query = "SELECT * FROM table";
$result = mysqli_query($connection,$query);
$num = mysqli_num_rows($result);

【讨论】:

    【解决方案4】:

    改变:

    $result = mysqli_query($query);
    

    到:

    $result = mysqli_query($connection, $query);
    

    我希望这能解决您的错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-07
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多