Некоторые SQL-запросы работают в терминале, но не с функцией db_query () в Drupal 6 Почему ..? - PullRequest
2 голосов
/ 13 февраля 2012

У меня есть следующая таблица mysql под названием «test».

enter image description here

допустим, он имеет следующие данные:

enter image description here

Теперь я хотел бы узнать возраст пользователя, для этого я использую следующий запрос.

SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(DOB, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(DOB, '00-%m-%d')) AS age from test where user_name = 'akshaynhegde';

Работает и возвращает 21 год (это когда я запускаю запрос в терминале)

Но когда я использую следующий код в Drupal 6, он ничего не возвращает ... !!

    global $user;
    $uname = $user->name;

$sql = "SELECT DATE_FORMAT(NOW(), '%Y') - DATE_FORMAT(DOB, '%Y') - (DATE_FORMAT(NOW(), '00-%m-%d') < DATE_FORMAT(DOB, '00-%m-%d')) AS age from test where user_name = '%s'";

$age = db_result(db_query($sql,$uname));

Я перепробовал все возможности, такие как db_fetch_array(), db_fetch_object() и отдельно выполнил $result = db_query($sql,$uname), а затем передал $ result в db_result() ..

Но НИЧЕГО НЕ РАБОТАЕТ! Почему .. ????

Ну, к вашему сведению другие простые запросы работают .. например, следующее, это работает.

$sql = "select DOB from test where user_name = '%s'";
$dob = db_result(db_query($sql,$uname));

Ответы [ 2 ]

6 голосов
/ 13 февраля 2012

У меня нет опыта работы ни с Drupal, ни с PHP, но я уверен, что ваша проблема - это %Y, %m и %d, которые вы указали в строке запроса. Вам нужно будет уйти оттуда, чтобы осталось только% s.

Согласно % d модификатор в db_query не нужен вы избегаете их, записывая два % вместо одного.

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

$sql = "SELECT DATE_FORMAT(NOW(), '%%Y') - DATE_FORMAT(DOB, '%%Y') - (DATE_FORMAT(NOW(), '00-%%m-%%d') < DATE_FORMAT(DOB, '00-%%m-%%d')) AS age from test where user_name = '%s'";
0 голосов
/ 13 февраля 2012

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

$dob = db_result(db_query(SELECT `DOB` FROM {test} WHERE user_name = '%s'",$uname);

Сам db_query работает с форматом типа printf, поэтому его легче придерживаться и он становится менее запутанным при выполнении более сложных запросов sql черезdrupal db api.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...