为什么mysql_fetch_array()期望参数1是资源?为什么参数1资源?

时间:2012-10-28 22:44:34

标签: php

警告:mysql_fetch_array()要求参数1为资源,字符串在第19行的C:\ xampp \ htdocs \ test \ index.php中给出

 <?php
 $con = mysql_connect('localhost');
 if (!$con)
   {
   die('Could not connect: ' . mysql_error());
   }


 mysql_select_db("schedule", $con);

 $sql = "SELECT * FROM classes LIMIT 0,50\n";

 mysql_query($sql);

 IF (!$sql) {
   ECHO 'broken';
 };

 while($row = mysql_fetch_array($sql, MYSQL_BOTH))
   {
   echo $row['language'] . " " . $row['level'];
   echo "<br />";
   }

 mysql_close($con);
 ?> 

为什么呢?该查询适用于phpmyadmin

4 个答案:

答案 0 :(得分:4)

mysql_fetch_array()函数的参数是您的SQL语句 string 。这是你的警告所说的。你应该先使用     $ res = mysql_query($ sql); 并将$ res作为参数传递给mysql_fetch_array()

答案 1 :(得分:1)

mysql_fetch_Array的输入是一个资源,它也是mysql_query的返回值。如果将值$ sql传递给mysql_query(),它将不会修改参数,因为它是按值传递的。您必须将返回值分配给另一个变量,该变量将是所需的资源。

  $result = mysql_query($sql);

然后,将result参数传递给mysql_fetch_array:

  $row = mysql_fetch_array($result, MYSQL_BOTH)

另一个重要注意事项:正如您在所有相关主题中看到的那样,请阅读php.net中的红色框以了解这些功能。

  

不鼓励使用此扩展程序。相反,MySQLi或PDO_MySQL   应该使用扩展名。另请参见MySQL:选择API指南和   相关FAQ以获取更多信息。替代此功能   包括:

     

mysqli_query()PDO :: query()

答案 2 :(得分:0)

更改:mysql_query($ sql); 收件人:$sql = mysql_query($sql);

答案 3 :(得分:0)

引自PHP.net关于mysql_query()

  

对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回   resultset,mysql_query()在成功时返回资源,或者返回FALSE   错误。

     

对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等,   mysql_query()成功时返回TRUE,错误时返回FALSE。

在您的情况下,资源会被退回,但您忘记将其分配给任何内容。

mysql_query($sql)更改为$resource = mysql_query($sql)

完整文档就在这里:http://php.net/manual/en/function.mysql-query.php