db_query( 'SELECT nid FROM uc_products'); 結果はありません!どうして?


7

有効で機能している Ubercartに関連する非常に単純なクエリがあり、タスクはuc_productsテーブルからすべてのNIDを取得することであり、単純に結果を返しません。

$query = 'SELECT nid FROM uc_products';
$result = db_query($query);
dsm('===================================================');
dsm($query);
while ($nid = db_result($result)) {
    dsm('$nid: '.$nid);
}

しかし、phpMyAdminの同じデータベース非常に同じクエリを実行するそれが機能し、すべての正しい結果が得られます(現在、8つの製品があります)。

phpMyAdminスクリーンショット

しかし、次のクエリは正しく機能し、予想されるすべての結果が得られます(vidフィールドは同じタイプですが、別の名前しかないため、最初のクエリは最も奇妙です):

$query = 'SELECT vid FROM uc_products';
$result = db_query($query);
dsm('===================================================');
dsm($query);
while ($vid = db_result($result)) {
    dsm('$vid: '.$vid);
}

$query = 'SELECT * FROM uc_products';
$result = db_query($query);
dsm('===================================================');
dsm($query);
while ($row = db_fetch_object($result)) {
    dsm('$row->nid: '.$row->nid);
}

$query = 'SELECT nid FROM node';
$result = db_query($query);
dsm('===================================================');
dsm($query);
while ($nid = db_result($result)) {
    dsm('$nid: '.$nid);
}

テスト結果のスクリーンショットは次のとおりです。

テストのスクリーンショット

ご覧のとおり、最初の2つのクエリは結果を返しませんが、他のクエリは正しく機能します。
これは本当に奇妙な問題です。コアモジュールは変更しなかったので、状況がわかりません。localhostで実行していても、進行中のパブリックサーバーで実行しても、結果は同じです。これはuc_order_condition_has_products_form()、条件付きアクションメニューでも正しく機能しないことを意味します。Drupalでこのような問題に遭遇したことはありません。

誰かがデバッグを開始する手掛かりを持っていますか?


3
参考までに、あなたのコードは3つのDrupal 6 Ubercartサイトで完璧に機能します(コードを '/ devel / php /'にコピー/貼り付けただけで、すべてのnidが期待どおりにメッセージ領域に出力されました)。インストールに固有。非常に奇妙です
クライブ

@Clive:回答に感謝します。はい、あなたは完全に正しいです。私がテストに使用した別の「クリア」Drupal 6.22(同じ「古い」バージョン)でもテストしたことを忘れていました。まったく問題なく動作します。しかし、私がDrupalのコアモジュールを変更しなかったため、このバージョンのDrupalでどのような問題が発生するか想像もできません。だから私は単に理解していません。Drupalを更新する必要がありますが、nodeIDが機能する理由が説明されていません。ID が機能しないのはなぜですかuc_products。しかし、アップデートにより、あらゆる種類の厄介なものが削除される可能性があります。私には手掛かりがありません...
Sk8erPeter

@Clive:更新された質問を参照してください...正常にSELECT * FROM uc_products機能します...:-O以前に述べたように、SELECT nid FROM uc_productsまだ機能しません。
Sk8erPeter

@クライヴ:参考までに、SELECT vid FROM uc_products正しく動作します!Drupalがnidフィールドでこのような問題を抱えているのはなぜですか?
Sk8erPeter

3
develモジュールをオンにして、admin / settings / develでquryロギングを有効にします。これにより、ページで実行されているクエリが表示されます。たぶんそのクエリは途中で何らかの形で変更されていますか?
5

回答:


2

最初の結果が「0」であり、phpがそれをFalseと評価して、whileループの実行を停止している可能性が高いと思います。


うわー、それはずっと前のことです...私はもうそのサイトをテストすることはできませんが、あなたは正しいです!:DIは、最初nidのの値が実際にはに等しいこと0に気づかなかったと思います。これは発生してはならないので、私の考えでは予想外です(ノードIDは実際には意味がないため、0から開始する必要があります) 1)-しかし、whileループをすぐに停止することができます。ありがとう!+1して受け入れました。:)
Sk8erPeter
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.