2012-02-13 20 views
2

私は "test"と呼ばれる次のmysqlテーブルを持っています。一部のSQLクエリはターミナルで動作しますが、Drupal 6のdb_query()関数では動作しません。

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)を実行し、その後db_result()に$結果を渡された。..

が、何も働きません...!なぜ..????

よく、FYIの他の簡単なクエリは動作します..たとえば、次のように動作します。

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

答えて

6

私はDrupalのか、PHPのいずれかでまったく経験を持っていないが、私はあなたの問題は、あなたのクエリ文字列を持っている%Y%m%dであることを確認しています。あなたは%sだけが残っているので、あなたは逃げる必要があります。

%d modifier in db_query not wantedによると、1つではなく2つの%を書いてエスケープします。

ですから、文字列は次のようになります照会:Drupalのでは

$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'"; 
+1

+1素晴らしい推測:) – Clive

+0

ニースの回答... Saved My Day ..! – Akki

0

を自分のテーブル名は、{}括弧で囲まなければなりません。 あなたもこのような1行にクエリを置くことができます。

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

その簡単にそれを使用することに固執するようdb_query自体は、printfのタイプのフォーマットと連携して、より複雑なSQLクエリを実行するときより少ない混乱となりdrupal db api。

+0

私はdb apiの概念を説明するためにあなたの単純な問い合わせに対処しました – Beyerz

関連する問題