Возможный дубликат:
Предупреждение: 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'); ?>
Изменить $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
ошибку, чтобы узнать, что вызывает проблему.