mysql_num_rows возвращает 0, но тот же запрос в phpMyAdmin возвращает результаты

0

Мы работаем в течение нескольких часов по серьезной проблеме.

У нас есть следующий код:

mysql_connect("localhost","xxx","xxx") or die(mysql_error());
mysql_select_db("xxxe");

$q = "SELECT m.id, m.expired_date, u.email
     FROM jos_osemsc_member m, jos_osemsc_orders o, jos_users u
    WHERE o.order_id  = $orderID
   AND m.member_id = o.user_id
   AND u.id  = o.user_id";

$res = mysql_query($q);

if (!$res) {
  mail('[email protected]','test',mysql_error());
}

mail("[email protected]", "count",  mysql_num_rows($res));

Мы получаем почту "count", но с "0" для результата mysql_num_rows. Если мы отправим запрос ($ q) по электронной почте и выполним его в phpMyAdmin, он будет работать, и мы получим одну строку...

Любые идеи?

Спасибо за помощь, которая будет ОЧЕНЬ apperciated

  • 4
    Я отказываюсь помогать кому-то, кто получает ответы с этого сайта, но не участвует и помечает ответы как принятые
  • 1
    Привет, друзья. Да, я знаю, что не ответил на последний вопрос, но это по простой причине: я раньше работал в банке, и многие сценарии были заблокированы в браузерах. И я не мог подтвердить ответ или опубликовать какие-либо комментарии из-за этого ограничения. Я действительно сожалею об этом.
Показать ещё 5 комментариев
Теги:
phpmyadmin
mysql-num-rows

2 ответа

3

Возможно, пользователь xxx имеет более ограничительные разрешения, чем пользователь, который вы используете для PMA.

  • 0
    Нет не возможно Мы используем тех же пользователей
  • 0
    Это весь ваш код или вы перезаписываете $res где-нибудь? Если вы не настроили error_reporting на E_ALL , сделайте это сейчас: error_reporting(E_ALL); , Вы получаете какие-либо ошибки?
Показать ещё 2 комментария
0

Попробуйте переформулировать запрос. Я считаю, что LEFT JOINs намного легче понять и справиться.

SELECT m.id, m.expired_date, u.email
FROM jos_osemsc_orders AS o 
        LEFT JOIN jos_osemsc_member AS m ON (m.member_id = o.user_id) 
        LEFT JOIN jos_users AS u ON (u.id = o.user_id)
WHERE o.order_id  = $orderID;

Если это не сработает, уменьшите запрос до таблицы заказов и убедитесь, что вы получили результат. Если это работает, добавьте таблицу и т.д.

Кроме того, я вижу, где будет проблема, если заказ был помещен кем-то, кто был пользователем, но не членом, или наоборот. Тем не менее, этот вопрос будет решаться с помощью запроса на объединение влево. Кроме того, я изменил порядок таблиц в запросе, чтобы иметь больше смысла.

  • 0
    Используемый в этом вопросе неявный синтаксис соединения фактически эквивалентен внутреннему соединению, но я согласен, что явный синтаксис соединения предпочтительнее.
  • 0
    Да, я должен был упомянуть об этом, и я мог бы с трудом использовать ЛЕВЫЕ СОЕДИНЕНИЯ, но в этом случае я думаю, что это поможет определить, была ли причина пустого набора в том, что не было соответствующего члена или пользователя.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню