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());

そのため、selectとforeachを使用して、データベースアイテムでSESSIONアイテムをチェックしようとしています。コードはSESSIONをループし、componentIDをSELECTに追加します。これは、substr関数に取り込まれて、最後のコンマを削除します(たとえば、「001,002 * *」を削除します。構文は正しいと確信していますが、取得を続けます。次の構文エラー:

SQL構文にエラーがあります。1行目の「00004,00007)」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

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

4

2 に答える 2

2

私はこの行があなたの問題だと思います:

ccKepが示唆するように、コンマで区切られたIDのセットを作成するプロセスを簡略化することもできます。

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

完全なコードは次のようになります。

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

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

これにより、$ _ SESSION ['cart']からが取得されます。配列のインデックスが本当に必要な場合は、最初にコーディングしたときに、次のオプションがあります。

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

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

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

于 2012-05-11T20:55:16.820 に答える
0

これを試してください:

    $sql = "SELECT * FROM component WHERE componentID IN (";
    foreach($_SESSION['cart'] as $id => $value) {
            $some_temp_array[] = $id;
    }
    $sql .= implode(',', $some_temp_array).")";
于 2012-05-11T21:00:27.177 に答える