可能重复:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result
我在下面的代码中遇到以下错误消息(位于查询的末尾):
警告:mysql_num_rows():提供 参数不是有效的MySQL结果 资源在../view-ind-order.php上 第28行
此脚本应该检索订单(从列出订单表中所有order_id行的页面),订单内容,订购用户和产品信息。我想我在哪里得到的错误是订单中有多个产品,但我不能确定我哪里出错了。 (标题有一个会话启动命令)
<?php
$page_title = 'Order';
include ('./includes/header.html');
if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) )
{
$id = $_GET['id'];
} elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) )
{
$id = $_POST['id'];
} else {
echo 'This page has been accessed in error';
include ('./includes/header.html');
exit();
}
require_once ('mydatabase.php');
$query = "SELECT us.users_id, us.users_first_name, us.users_surname, us.users_business,
ord.order_id, ord.users_id, ord.total, ord.order_date,
oc.oc_id, oc.order_id, oc.products_id, oc.quantity, oc.price
prd.products_id, prd.products_name, prd.price
FROM users AS us, orders AS ord, order_contents AS oc, products AS prd
WHERE ord.order_id=$id
AND us.users_id = ord.users_id
AND ord.order_id = oc.order_id
AND oc.products_id = prd.products_id
";
$result = @mysql_query ($query);
if (mysql_num_rows($result) == 1) {
$row = mysql_fetch_array ($result, MYSQL_NUM);
echo '
<table>
<tr>
<td><strong>Name:</strong></td>
<td>' . $row[1] . ' ' . $row[2] . '</td>
</tr>
<tr>
<td><strong>Business Name</strong></td>
<td>' . $row[4] . '</td>
</tr>
<tr>
<td><strong>Total:</strong></td>
<td>' . $row[7] . '</td>
</tr>
<tr>
<td><strong>Quantity</strong></td>
<td>' . $row[12] . '</td>
</tr>
<tr>
<td><strong>Product:</strong></td>
<td>' . $row[15] . '</td>
</tr>
<tr>
<td><strong>Price:</strong></td>
<td>' . $row[13] . '</td>
</tr>
</table>
';
} else {
echo '<h1 id="mainhead">Page Error</h1>
<p class="error">This page has been accessed in error.</p><p><br /><br /></p>';
}
mysql_close();
include ('./includes/footer.html');
?>
答案 0 :(得分:6)
更改$result = @mysql_query ($query);
与
$result = mysql_query ($query) or die(mysql_error());
并查看您是否有任何错误。
修改强>
你在oc.price之后和prd.products_id之前错过了一个逗号。像这样更改您的查询:
$query = "SELECT us.users_id, us.users_first_name, us.users_surname, us.users_business,
ord.order_id, ord.users_id, ord.total, ord.order_date,
oc.oc_id, oc.order_id, oc.products_id, oc.quantity, oc.price/*here*/,/**/
prd.products_id, prd.products_name, prd.price
FROM users AS us, orders AS ord, order_contents AS oc, products AS prd
WHERE ord.order_id=$id
AND us.users_id = ord.users_id
AND ord.order_id = oc.order_id
AND oc.products_id = prd.products_id
";
答案 1 :(得分:1)
你的sql中可能有错误,
显示like:
if (!mysql_query($query, $link)) {
echo mysql_errno($link) . ": " . mysql_error($link) . "\n";
}
答案 2 :(得分:0)
显然查询导致错误:
$result = mysql_query ($query) or trigger_error(mysql_error(),E_USER_ERROR);
echo
错误以找出导致问题的原因。
答案 3 :(得分:0)
在调用$result
之前,您需要检查mysql_num_rows()
是否有效(即通常在mysql_query()
之后立即生效,否则您可能会收到此错误。
但是,如果$result
不是有效资源,则表示您的查询失败,因此问题早于mysql_num_rows()
。
我注意到您使用@
来压制mysql_query()
引发的任何错误。你为什么做这个?如果您从中收到错误,则需要(a)了解它,并(b)修复它。这里的错误意味着您的SQL查询存在错误 - 您应该先调查此问题,因为这是您真正的问题所在。
您可以使用mysql_query()
函数找出mysql_error()
引发的错误。它会告诉您查询的问题。 (乍一看这个查询看起来没问题,但你可能很容易拼错一个字段名,或者在错误的表前缀中得到一个字段等等;你需要看错误响应才能确定问题是什么)
顺便说一下,is_numeric
不能很好地检查输入是否有效:对于在查询中失败的值,它可以返回true(例如科学指数格式的数字,小数值等等)。
答案 4 :(得分:0)
如果$result
不是有效的MySQL结果资源,则表示查询未返回资源而是false
,因此query failed。
在继续使用结果之前,您不应该禁止显示错误消息或至少检查查询结果是否为false:
if (!$result)
{
// error
}
else
{
// use results
}
答案 5 :(得分:0)
首先:您是否曾在MySQL查询浏览器等MySQL环境中尝试过请求,以了解请求是否正确以及请求是否返回结果。
第二:你不能使用普通的mysql_query函数将请求发送到MySQL服务器吗?