mysql - получить результаты в приглашении mysql, но не через скрипт?

0

Я использую php для извлечения некоторых записей из моего db, и он продолжает возвращать "Результаты не найдены". Но, когда я печатаю запрос на экран и копирую и вставляю его в приглашении mysql, я получаю 1 строку. Конечно, это вопрос с монстром, но не должен ли я получать те же результаты? Что может случиться? Любые предложения о том, что проверить?

Не знаю, полезно ли это, но вот запрос:

$q = db_query("SELECT node.nid AS nid, gallery.field_attach_gallery_value AS gallery, 
node.type AS type, node.vid AS vid, ce.field_brochure_link_url AS ce_brochure_url, 
ce.field_brochure_link_title AS ce_brochure_title, 
ce.field_brochure_link_attributes AS ce_brochure_attributes, 
location.field_location_value AS location_field_location_value, 
ce.field_ongoing_value AS ce_field_ongoing_value, 
ce.field_poster_link_url AS ce_poster_url, 
ce.field_poster_link_title AS ce_poster_title, 
ce.field_poster_link_attributes AS ce_poster_attributes, 
ce.field_press_release_link_url AS ce_press_release_url, 
ce.field_press_release_link_title AS ce_press_release_title, 
ce.field_press_release_link_attributes AS ce_press_release_attributes, 
(DATE_FORMAT(STR_TO_DATE(ce.field_start_date_value,'%Y-%m-%dT%T'),'%M %d, %Y %h:%i %p')) AS start, 
(DATE_FORMAT(STR_TO_DATE(ce.field_start_date_value2,'%Y-%m-%dT%T'),'%M %d, %Y %h:%i %p')) AS end, 
ce.field_web_resources_url AS ce_web_resources_url, 
ce.field_web_resources_title AS ce_web_resources_title, 
ce.field_web_resources_attributes AS ce_web_resources_attributes, 
node_revisions.body AS body, 
node_revisions.format AS node_revisions_format, 
node.title AS title 
FROM node node 
LEFT JOIN content_field_attach_gallery gallery ON node.vid = gallery.vid 
LEFT JOIN content_type_exhibitions_and_programs ce ON node.vid = ce.vid 
LEFT JOIN content_field_location location ON node.vid = location.vid 
LEFT JOIN node_revisions node_revisions ON node.vid = node_revisions.vid 
WHERE (node.status <> 0) 
AND (node.type in ('exhibitions_and_programs')) 
AND '2010-01-19' BETWEEN (DATE_FORMAT(STR_TO_DATE(ce.field_start_date_value, '%Y-%m-%dT%T'), '%Y-%m-%d')) 
AND (DATE_FORMAT(STR_TO_DATE(ce.field_start_date_value2, '%Y-%m-%dT%T'), '%Y-%m-%d')) 
ORDER BY (DATE_FORMAT(STR_TO_DATE(ce.field_start_date_value, '%Y-%m-%dT%T'), '%Y-%m-%d')) DESC");

$num = FALSE;

while($r = db_fetch_array($q)) {
   $num = TRUE;
   $line = 'ok, found something!';
}

if($num == TRUE) {
  print $line;
} else {
  print 'No records found';
}
Теги:
recordset

2 ответа

0
Лучший ответ

Кажется, что ваши db_query() и db_fetch_array() - это пользовательские функции. Вы действительно должны var_dump($q) и полностью заменить свой выходной код на var_dump(db_fetch_array($q));, чтобы получить отладочную информацию о своей проблеме.

  • 0
    var_dump просто дает мне: «предупреждение: mysql_fetch_array (): предоставленный аргумент не является допустимым ресурсом результата MySQL в /usr/local/www/s/drupal-6.14/includes/database.mysql.inc в строке 160.», который, Я уже знаю, что это не работает, но я не могу понять, почему это работает нормально, если я просто запускаю точно такой же запрос в командной строке?
  • 0
    Отредактированный ответ Пекки правильный. Вам нужно будет вручную экранировать %d (не% b) в вашем запросе, поскольку Drupal, вероятно, пытается интерпретировать их как строковые аргументы.
Показать ещё 1 комментарий
4

Изменить: Вы прокомментируете, что используете Drupal.

Из документов Drupal на db_query (Emphasis mine):

Запускает базовый запрос в активной базе данных.

Пользовательские аргументы для запроса должны передаваться в виде отдельных параметров, чтобы их можно было экранировать надлежащим образом, чтобы избежать атак SQL-инъекций.

Допустимые% -модификаторы:% s,% d,% f,% b (двоичные данные, не заключаются в '') и %%. ПРИМЕЧАНИЕ. Использование этого синтаксиса будет отличать значения NULL и FALSE до десятичного числа 0, а истинные значения - десятичные.

Поэтому я предполагаю, что Drupal заменяет ваш %d в вашем запросе.

Старый ответ:

db_query() не является собственной функцией PHP/mySQL/mysqli, о которой я знаю. Используете ли вы оболочку базы данных? Если это так, вы должны сообщить нам, какой из них или использовать стандартный mysql_*.

Если все настройки верны, должен прийти тот же результат.

Что вы должны проверить:

  • Добавьте запрос echo mysql_error(); после запроса, чтобы убедиться, что он не работает
  • Убедитесь, что вы выбрали правильную базу данных, используя mysql_select_db()
  • Убедитесь, что вы используете точные данные сервера и пользователя для обоих запросов phpMyAdmin и script.
  • 0
    Я использую Drupal, и вот как я делаю все мои запросы ... Итак, да, БД верна, и все настройки верны ... Все остальные мои запросы работают просто отлично ... И Я не получаю вывод от mysql_error ()
  • 0
    Смотрите мой отредактированный ответ.

Ещё вопросы

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