mysql_num_rows возвращает 0, но тот же запрос в phpMyAdmin возвращает результаты - PullRequest
0 голосов
/ 27 августа 2010

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

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

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('xxx@xxx.com','test',mysql_error());
}

mail("xxx@xxx.com", "count",  mysql_num_rows($res));

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

Есть идеи?

Спасибо за помощькоторый будет ОЧЕНЬ исполнен

Ответы [ 2 ]

3 голосов
/ 27 августа 2010

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

0 голосов
/ 27 августа 2010

Попробуйте переформулировать ваш запрос. Я считаю, что ЛЕВЫЕ СОЕДИНЕНИЯ гораздо легче понять и разобраться.

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;

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

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

...