2012-10-28 65 views
0

警告:mysql_fetch_array()预计参数1是资源,在串C中给出:第19行为什么mysql_fetch_array()期望参数1是资源?为什么不是参数1资源?

<?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); 
?> 

为什么\ XAMPP \ htdocs中\测试\的index.php?该查询在phpmyadmin中可用

+0

它仍然是一个字符串。您此时没有发出数据库查询('mysql_query')。 – mario

+0

我做了,我不小心从另一个目录中的旧版本的文件复制。修正了OP。 –

+1

变化不大。 '$ sql'仍然是一个字符串,你没有重新分配结果句柄。 - 虽然你对mysql的使用感到困惑,但[查看PDO](http://www.php.net/manual/en/mysqlinfo.api.choosing。PHP)而是。不太麻烦,特别是准备好的陈述(通常作为副产品更安全)。 – mario

回答

4

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

0

更改:mysql_query($ sql); 要:$sql = mysql_query($sql);

0

从PHP.net引约mysql_query()

对于SELECT,SHOW,描述,解释等语句返回的结果集 ,请求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

1

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

$result = mysql_query($sql); 

,然后结果传递参数mysql_fetch_array:

$row = mysql_fetch_array($result, MYSQL_BOTH) 

另一个重要提示:正如你可能在所有相关的线程看到,阅读php.net这些函数的红盒子。

使用这个扩展的气馁。应该使用MySQLi或PDO_MySQL 扩展。另请参阅MySQL:选择API指南和 相关的FAQ以获取更多信息。替代此功能 包括:

mysqli_query()PDO ::查询()

+0

^这是嵌入正确警告的好回答。正如...不再使用mysql_ *。 – CodeAngry

+0

@Claudrian,谢谢.. !! – janenz00

相关问题