Предупреждение: mysql_num_rows (): предоставленный аргумент не является допустимым ресурсом результата MySQL

Возможный дубликат:
Предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым результатом MySQL

Я получаю следующее сообщение об ошибке в коде ниже (который находится в конце запроса):

Предупреждение: 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'); ?> 

Solutions Collecting From Web of "Предупреждение: mysql_num_rows (): предоставленный аргумент не является допустимым ресурсом результата MySQL"

Изменить $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 "; 

у вас, вероятно, есть ошибка в вашем sql,

показать это как :

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

Если $result не является допустимым ресурсом результата MySQL, это означает, что запрос не возвратил ресурс, а false , поэтому ваш запрос не удался .

Вы не должны подавлять сообщение об ошибке или, по крайней мере, проверять, чтобы результат запроса не был ложным, прежде чем приступать к использованию результатов:

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

Вам нужно проверить, что $result действителен перед вызовом mysql_num_rows() (т.е. обычно сразу после mysql_query() , в противном случае вы можете получить эту ошибку.

Однако, если $result не является допустимым ресурсом, значит, ваш запрос не удался, поэтому проблема выше mysql_num_rows() .

Я отмечаю, что вы используете @ для устранения любых ошибок, вызванных mysql_query() . Зачем ты это делаешь? Если вы получаете сообщение об ошибке, вам необходимо (а) знать об этом и (b) исправить. Ошибка там подразумевает, что ваш запрос SQL имеет ошибки – вы должны исследовать это перед чем-либо еще, так как именно здесь возникает ваша настоящая проблема.

Вы можете узнать, какая ошибка была mysql_query() с помощью функции mysql_error() . Он расскажет вам, в чем проблема с запросом. (на первый взгляд запрос выглядит нормально, но вы можете легко ошибочно ввести имя поля или получить поле в неправильном префиксе таблицы и т. д., вам нужно будет увидеть ответ об ошибке, чтобы точно знать, в чем проблема )

Кстати, is_numeric не является хорошей проверкой того, является ли вход действительным или нет: он может возвращать true для значений, которые не будут выполняться в вашем запросе (например, номера в научном экспоненциальном формате, десятичные значения и т. Д.).

Во-первых: Вы пробовали запрос в MySQL, как MySQL Query Browser, чтобы узнать, правильно ли запрос, и если запрос возвращает результат.

Второе: не можете ли вы использовать обычную функцию mysql_query для отправки запроса на ваш сервер MySQL?

по-видимому, запрос вызывает ошибку:

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

echo ошибку, чтобы узнать, что вызывает проблему.