MySQL获取数组 - 不是资源?它应该是?

时间:2011-11-28 21:22:18

标签: php mysql

  

可能重复:
  mysql_fetch_array() expects parameter 1 to be resource, boolean given in select
  Warning: mysql_fetch_* expects parameter 1 to be resource, boolean given error

获取以下MySQL / PHP错误:

mysql_fetch_array() expects parameter 1 to be resource

我以前遇到过这个问题,但在我看来,我的代码会生成一个MySQL资源,所以应该可以正常工作。

这是我的代码:

$culture = $_POST['culture'];
    $service = $_POST['service'];
    $rescultservorg = mysql_query("Select org_id from org_cult_xref INNER JOIN org_serv_xref using (org_id) where (cult_id, serv_id) = ('".$culture."', ".$service."')");
    while ($rescultservrow = mysql_fetch_array($rescultservorg)) {
  $resorgfullcultserv = mysql_query('SELECT org_id, org_name, add_1, add_2, city, state, zip, url, email, phone, contact, hours, file_loc, notes, description FROM organization WHERE org_id = '.$rescultservrow);

2 个答案:

答案 0 :(得分:1)

最重要的是,我建议您在处理查询字符串中的值或发布数据时使用更安全的做法。如果您要使用mysql_*系列函数,必须始终清理来自“用户土地”的数据。最简单的方法是使用mysql_real_escape_stringdocs

进行清理

因此:

$culture = mysql_real_escape_string($_POST['culture']);
$service = mysql_real_escape_string($_POST['service']);
$rescultservorg = mysql_query('
        SELECT 
            org_id 
        FROM 
            org_cult_xref 
        INNER JOIN 
            org_serv_xref USING (org_id) 
        WHERE 
            (cult_id, serv_id) = ("'.$culture.'", "'.$service.'")
    ');

对于手头的错误,正如mysql_querysee docs)的文档中所建议的那样,应该检查以确保返回的值确实是一个有效的结果集,然后再传递它像mysql_fetch_assoc之类的功能。检查缺少结果的最简单方法是检查变量是否为falsey值:

根据文件:

  

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

     

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

在代码中:

if ($rescultservorg == false) 
    die('There was a database error: '.mysql_error());

当然,这是处理错误的一种相当简单的方法:实际上,您可能希望构建一个错误输出数组,或者推迟处理任何错误,直到脚本结束。但是,这里的底线是在将$rescultservorg传递给期望处理结果的函数之前检查WHERE cult_id = "'.$culture.'" AND serv_id = "'.$service.'" 是否实际包含某些结果。

为清楚起见,我建议您使查询更加明确:

mysql_*

......这不是必需的(或者可能是您的问题的原因),但是如果没有其他内容则更清楚。

最后,我建议你转而离开mysqli系列函数,转而使用mysql_connectdocs)或PDO(docs),而不是就代码而言,这需要你做出任何重大改变。


此答案基于您已正确建立与数据库服务器的工作连接的假设。有关详情,请参阅print_r(mysql_fetch_array(mysql_query(' SELECT COUNT(*) FROM org_cult_xref '))); docs)。如果您不确定是否已建立连接,则可能是您没有 - 通过传递简单查询并输出结果来测试以确保您拥有连接。使用这样的查询(假设您在帖子中提到的表实际存在):

org_cult_xref

您应该看到表{{1}}中的行数,即使计数为零,您仍应看到输出中反映的行数。如果没有,您的问题可能是与数据库的连接 - 从文档示例开始,从基本连接开始工作。

答案 1 :(得分:0)

您的SQL查询失败,因此不返回资源但返回FALSE(布尔值)。 mysql_query手册中记录了此行为。

通过致电mysql_error

查看原因
echo mysql_error();