0

データベースにクエリを実行しようとしていますが、何らかの理由で、ハードコードされたパラメーターを入力した場合にのみクエリが機能します。変数を使用すると、クエリが機能しなくなります...

これは、ハードコードされたパラメーターを使用した私のクエリであり、問​​題なく動作します。

$q_jobs = 'select distinct nid from node n, field_data_field_job_tags as tags
          where (type= \'job\' and n.language = \'nl\' and tags.entity_id = n.nid 
               and tags.field_job_tags_value = \'Enterprise Asset Management\') 
          order by n.changed desc limit 7';

しかし、変数を使用すると、クエリが機能しなくなります...

 $q_jobs = 'select distinct nid from node n, field_data_field_job_tags as tags
              where (type= \'job\' and n.language = :lang and tags.entity_id = n.nid 
                   and tags.field_job_tags_value = :title) 
              order by n.changed desc limit 7';
 $results_jobs = db_query($q_jobs, array(':lang' => $language->language, 
                                         ':title' => $node->title));

これは Drupal クエリですが、構文のどこかでエラーが発生しただけではないでしょうか?

次のエラーが表示されます。

PDOException: SQLSTATE[42000]: 構文エラーまたはアクセス違反: 1064 SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルを参照して、1 行目の「(type= 'job' and n.language = 'nl' and tags.entity_id = n.nid and tags.field_job' の近くで使用する正しい構文を確認してください。 {node} n とは異なる nid、タグとしての field_data_field_job_tagswhere (type= 'job' and n.language = :lang and tags.entity_id = n.nid and tags.field_job_tags_value = :title)order by n.changed desc limit 7; Array ( [:lang] => nl [:title] => Enterprise Asset Management ) in rd_get_related_news_and_blogs()

4

1 に答える 1

3

ここにタイプミスがあります: -間にfield_data_field_job_tags as tagswhere (type=スペースが必要なので、SQLの引用部分は。tagswherefield_data_field_job_tags as tags where (type=

常にすべてのmysqlエラーメッセージを読んでください-失敗しているクエリは常に引用符で囲まれているため、クエリのタイプミスやその他の間違いを簡単に見つけることができます。

編集:cosあなたは私を信じていません、ここにmysqlエラーメッセージからの繰り返しのクエリがあります:

select distinct nid from {node} n, field_data_field_job_tags as tagswhere (type= 'job' and n.language = :lang and tags.entity_id = n.nid and tags.field_job_tags_value = :title)order by n.changed desc limit 7;

ここnewlineで、クエリ内のどこにあるか、MySQLが失敗として返したクエリ内のスペースがあるべきか(そうでないか)を確認します。次に、すべての行の終わりにスペースを入れて、クエリが機能していることを確認します...

私はあなたを助けます、との間tagsとの間にはスペースがあるべきです-しかしそうではありません。唯一のスペースは、タブスペースのためとの間です...where\'Enterprise Asset Management\')order byn.nidand tags.field_job_tags_value

于 2012-05-04T10:24:57.913 に答える