可能重复:
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);
答案 0 :(得分:1)
最重要的是,我建议您在处理查询字符串中的值或发布数据时使用更安全的做法。如果您要使用mysql_*
系列函数,必须始终清理来自“用户土地”的数据。最简单的方法是使用mysql_real_escape_string
(docs)
因此:
$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_query
(see 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_connect
(docs)或PDO(docs),而不是就代码而言,这需要你做出任何重大改变。
此答案基于您已正确建立与数据库服务器的工作连接的假设。有关详情,请参阅print_r(mysql_fetch_array(mysql_query('
SELECT
COUNT(*)
FROM
org_cult_xref
')));
(docs)。如果您不确定是否已建立连接,则可能是您没有 - 通过传递简单查询并输出结果来测试以确保您拥有连接。使用这样的查询(假设您在帖子中提到的表实际存在):
org_cult_xref
您应该看到表{{1}}中的行数,即使计数为零,您仍应看到输出中反映的行数。如果没有,您的问题可能是与数据库的连接 - 从文档示例开始,从基本连接开始工作。
答案 1 :(得分:0)