1

挿入クエリを 1 つだけ使用して、次のコードを簡略化することはできますか?

if(isset($_POST['colore'])) {
    $range = array_keys($_POST['colore']); 
    foreach ($range as $key) {
    $colore = $_POST['colore'][$key];
    $s = $_POST['S'][$key];
    $m = $_POST['M'][$key];
    $l = $_POST['L'][$key];
    $xl = $_POST['XL'][$key];
    $xxl = $_POST['XXL'][$key];

    $sql = "INSERT INTO store_product_attributes (`prod_id`, `color`, `size`, `qty`)
    VALUES ('$last_id', '$colore', 's', '$s')";
    $query = mysql_query($sql) or die(mysql_error());
    $sql = "INSERT INTO store_product_attributes (`prod_id`, `color`, `size`, `qty`)
    VALUES ('$last_id', '$colore', 'm', '$m')";
    $query = mysql_query($sql) or die(mysql_error());
    $sql = "INSERT INTO store_product_attributes (`prod_id`, `color`, `size`, `qty`)
    VALUES ('$last_id', '$colore', 'l', '$l')";
    $query = mysql_query($sql) or die(mysql_error());
    $sql = "INSERT INTO store_product_attributes (`prod_id`, `color`, `size`, `qty`)
    VALUES ('$last_id', '$colore', 'xl', '$xl')";
    $query = mysql_query($sql) or die(mysql_error());
    $sql = "INSERT INTO store_product_attributes (`prod_id`, `color`, `size`, `qty`)
    VALUES ('$last_id', '$colore', 'xxl', '$xxl')";
    $query = mysql_query($sql) or die(mysql_error());
}

}

4

3 に答える 3

4

次のように書き換えることができます。

$colore = mysql_real_escape_string($_POST['colore'][$key]);
$s = mysql_real_escape_string($_POST['S'][$key]);
$m = mysql_real_escape_string($_POST['M'][$key]);
$l = mysql_real_escape_string($_POST['L'][$key]);
$xl = mysql_real_escape_string($_POST['XL'][$key]);
$xxl = mysql_real_escape_string($_POST['XXL'][$key]);

$sql = "
    INSERT INTO store_product_attributes 
        (`prod_id`, `color`, `size`, `qty`)
     VALUES ('$last_id', '$colore', 's', '$s'),
        ('$last_id', '$colore', 'm', '$m'),
        ('$last_id', '$colore', 'l', '$l'),
        ('$last_id', '$colore', 'xl', '$xl'),
        ('$last_id', '$colore', 'xxl', '$xxl')";
$query = mysql_query($sql) or die(mysql_error());

重要:

mysql_real_escape_string()クエリで使用されるすべての値を確認してください。

mysql 拡張機能の使用は推奨されていないため、これを使用している間は、MySQLiまたはPDOに切り替えることをお勧めします。

于 2012-06-12T12:17:58.320 に答える
2

あなたが試すことができます :

INSERT INTO store_product_attributes (`prod_id`, `color`, `size`, `qty`)
VALUES ('$last_id', '$colore', 's', '$s'), ('$last_id', '$colore', 'm', '$m'), 
('$last_id', '$colore', 'l', '$l'), ('$last_id', '$colore', 'xl', '$xl'), 
('$last_id', '$colore', 'xxl', '$xxl');

しかし、あなたのコードは危険です。そのコードでは SQL インジェクションは非常に簡単です。セキュリティについてもっと学ぶ必要があります (Google で「owasp」または「sql インジェクション」と入力してください)。

于 2012-06-12T12:13:24.623 に答える
0

要点が正しければ、このスキーマで複数の値を挿入できるはずです。

INSERT INTO table (field1, field2, ...) VALUES (...), (...)
于 2012-06-12T12:16:06.710 に答える