2010-12-29 22 views
0

私はmysqlクエリを実行し、回答の結果を特定のカテゴリ に保存しようとしていますが、最後の行の正確性が失われています。特定のカテゴリへのクエリの制限

$category_in_now = get_products_category_id($_GET['products_id']); 
$similar_products = "SELECT p.products_type, p.products_id, pd.products_name, 
p.products_image, p.products_price, p.products_tax_class_id, 
p.products_date_added, m.manufacturers_name, p.products_model, p.products_quantity, 
p.products_weight, p.product_is_call, 
p.product_is_always_free_shipping, p.products_qty_box_status, 
p.master_categories_id 
FROM " . TABLE_PRODUCTS . " p 
LEFT JOIN " . TABLE_MANUFACTURERS . " m 
ON (p.manufacturers_id = m.manufacturers_id), " . 
TABLE_PRODUCTS_DESCRIPTION . " pd 
WHERE p.products_status = 1 
AND p.products_id = pd.products_id 
AND p.master_categories_id == " . $category_in_now; 

12月29日: 私はこれをやってしまったが、RANDのLIMIT部分にいくつかの質問にループの必要性が残っています、私はこれを正しくやっていますか?

<?php 
echo '<div>'; 
$category_in_now = zen_get_products_category_id($_GET['products_id']); 

for($i=0;$i<4;$i++) { 
     $products_query_raw = "SELECT p.products_id, p.products_type, pd.products_name, p.products_image, p.products_price, 
           p.master_categories_id 
           FROM " . TABLE_PRODUCTS . " p 
           LEFT JOIN " . TABLE_MANUFACTURERS . " m 
           ON (p.manufacturers_id = m.manufacturers_id), " . TABLE_PRODUCTS_DESCRIPTION . " pd 
           WHERE p.products_status = 1 
           AND p.products_id = pd.products_id 
           AND p.master_categories_id = :catInNow ORDER BY rand() LIMIT 0,4"; 

     $products_query_raw = $db->bindVars($products_query_raw, ':catInNow', $category_in_now, 'integer'); 
     $result = $db->Execute($products_query_raw); 

     echo '<li>'; 
      echo '<div id="item">'; 
     if ($result->RecordCount() > 0) { 
      echo '<a href="' . zen_href_link('product_info', 'cPath=' . $cPath . '&products_id=' . $result->fields['products_id']) . '">'; 
      echo zen_image(DIR_WS_IMAGES . $result->fields['products_image'], $result->fields['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT); 
      echo '</a>'; 
      echo '</div>'; 
     echo '</li>'; 
     } 
} 
echo '</div>'; 
?> 
+0

あなたの質問は何ですか?意図した通りに動かないのですか? –

+0

[コードブロックのフォーマット方法](http://meta.stackexchange.com/questions/22186/how-do-i-format-my-code-blocks) – ajreal

答えて

1

get_products_category_id()の内容によっては、SQL注入ホールになる可能性があります。あなたはそのような変数を追加することはありません。最近では、mysqliまたはPDOの準備済み文を使用します。もちろん、手動でエスケープすることもできますし、特殊なケースでは、intへのキャストで十分です(あなたは整数で何か悪意を隠すことはできません)。しかし、これは問題を求めています。これを避ける中央のヘルパー(または単にDrupal :)を使用してください)。

最後に、==はSQL操作ではないため、最後の行も確かにSQLで間違っています。あなたのヘルパーが製品を得ることを考えると* s *私はあなたが望んでいると思うIN。それが単一の値ならば、=

+0

get_products_category_id()は、テーブルからint値を返します私が思うものを投げ込む必要はありません。私は==を単一の=に固定し、問題を修正しました。 –

+0

私はこれに少し新しい私を言うことを忘れました:P –

関連する問題