2011-05-19 67 views
2

Possible Duplicate:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result警告:mysql_num_rows():提供的参数不是一个有效的MySQL结果资源

我得到下面的错误消息上下面的代码(其是在查询的末尾):

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in ../view-ind-order.php on line 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'); 
?> 
+2

这可能意味着您的mySQL查询中有错误。将@ mysql_query($ query);'行更改为'@mysql_query($ query)或die(mysql_error());' – 2011-05-19 13:41:58

+0

您的SELECT语句(变量$ query)可能有错误。尝试隔离select语句,像'$ result = mysql_query($ query)或者die(mysql_error());'来找出它有什么问题。 – Bjoern 2011-05-19 13:44:27

回答

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  
     "; 
+0

我得到这个'你的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册,以在'.products_id,prd.products_name,prd.price FROM users AS us',第4行的订单AS'' – AdamMc 2011-05-19 13:50:56

+0

之后使用正确的语法,在oc.price后放置一个逗号和之前prd.products_id – CristiC 2011-05-19 13:52:00

+0

好消息:它订购了一个产品时检索订单。坏消息:如果有多个订单,它会显示“此页面已被错误访问”。 – AdamMc 2011-05-19 14:00:54

0

显然是查询产生错误:

$result = mysql_query ($query) or trigger_error(mysql_error(),E_USER_ERROR); 

echo错误,找出是什么原因造成的问题。

1

你可能在你的SQL有一个错误,

显示它like

if (!mysql_query($query, $link)) { 
    echo mysql_errno($link) . ": " . mysql_error($link) . "\n"; 
} 
0

您需要检查$result有效调用mysql_num_rows()之前(即通常在mysql_query()之后,否则你可以得到这个错误

然而,如果$result不是有效资源,则表示您的查询失败,因此问题早于mysql_num_rows()

我注意到您使用@来抑制mysql_query()引发的任何错误。你为什么做这个?如果你从中得到一个错误,你需要(a)知道它,并(b)修复它。这里的错误意味着你的SQL查询有错误 - 你应该在其他事情之前调查一下,因为这是你真正的问题所在。

您可以通过使用mysql_error()函数找出mysql_query()抛出的错误。它会告诉你这个查询有什么问题。 (乍一看,查询看起来没问题,但是您可能很容易误拼了一个字段名称,或者在错误的表前缀中获得了一个字段等;您需要查看错误响应以确定问题是什么)

顺便说一句,is_numeric不是一个很好的检查输入是否有效的方法:它可以在你的查询中失败的值返回true(例如科学指数格式的数字,十进制值等)。

0

如果$result不是一个有效的MySQL结果资源,这意味着,查询未返回的资源,但false,所以你query failed

你不应该取消错误信息,或者至少检查查询的结果不会是假的,你继续使用结果前:

if (!$result) 
{ 
    // error 
} 
else 
{ 
    // use results 
} 
0

第一:有你在试图请求像MySQL查询浏览器一样的MySQL环境知道请求是否正确以及请求是否返回结果。

第二个:你不能使用普通的mysql_query函数发送请求到你的MySQL服务器吗?

相关问题