2012-05-11 21 views
0

私は現在、カートを作ってるんだと私は以下の私のSQLクエリとのトラブルを抱えている:クエリの構文が正しくない

$sql="SELECT * FROM component WHERE componentID IN ("; 

      foreach($_SESSION['cart'] as $id => $value) { 
       $sql.=$id.","; 
      } 

      $sql=substr($sql, 0, -1).")"; 

      $query=mysql_query($sql) or die(mysql_error()); 

だから私は選択を使用して、私のデータベース項目とのセッションの項目をチェックしようとしていますとforeach。コードはSESSIONをループし、SELECTにcomponentIDを追加します。これは最後のカンマを削除するためにsubstr関数に取り込まれます(例えば '001,002 * *'を削除します。ある構文エラーを取得しておいてください。

あなたのSQL構文でエラーが発生している。 が 近く使用する権利構文についてはMySQLサーバのバージョンに対応していること取扱説明書を確認してください「00004,00007)を」行で1

誰でも私がここで間違っているのを見ることができますか?

$sql .= implode(",", $_SESSION['cart']) . ")"; 

完全なコードは次のようになります:あなたはまた、ccKepが示唆するようにIDのカンマで区切られた一連の製造工程を簡略化することができ

+1

あなたが実行しようとする完全なSQLを投稿することができますか? 'echo $ sql;' –

+0

問題の値は4ではなく '00004'ですか?左手のゼロが問題になることはありますか? – ethrbunny

+3

['implode()'](http://www.php.net/implode)は、文字列を区切り文字で連結するためのあなたの友人です。 – ccKep

答えて

2

私は、この行が問題だと思う

$sql="SELECT * FROM component WHERE componentID IN ("; 
$sql .= implode(",", $_SESSION['cart']) . ")"; 

$query=mysql_query($sql) or die(mysql_error()); 

の値は$ _SESSION ['cart']から得られます。本当に配列のインデックスが必要な場合は、最初にコード化されていますが、このオプションがあります。

array_keys()は配列のインデックスを抽出し、値を無視します。値が必要な場合は、私の最初の提案に固執してください。

+0

これはまさにその行が意図していたものです...最後のカンマが切り詰められると、エラーが発生することになります。 **しかし、カートが空の場合、ループは実行されず、クエリ全体が偽になります。** – ccKep

+0

もう一度見てください - 私はあなたにanytihngを断つ必要のないコードを含んでいます。 implode()は、配列を一緒に「接着」するのに適しています。これで問題が解決しない場合は、コードで作成された完全なクエリ文字列を必ず投稿してください。 –

+0

ありがとう、あなたのコードが働いた、私は間違いなくimplode()を読み上げます。乾杯ccKepとシュルレアル。 – Mike

0

は、この方法を試してください。

$sql = "SELECT * FROM component WHERE componentID IN ("; 
    foreach($_SESSION['cart'] as $id => $value) { 
      $some_temp_array[] = $id; 
    } 
    $sql .= implode(',', $some_temp_array).")"; 
+0

私はこれを試みましたが、最初の値の前にコンマを追加するので、構文はまだ正しくありません: "SELECT * FROM component where componentID IN(、00004,00007)" – Mike

関連する問題