sql >> データベース >  >> RDS >> Mysql

多次元配列から順序付けデータを挿入する方法

    私の例ではPDOを使用していますが、理解できると思います。また、mysqlではなくPDOまたはMYSQLIに移行する必要があります

    例:

    <?php
    // pdo example
    
    $sql = 'INSERT INTO table (field1, field2, field3) VALUES (:value1, :value2, :value3)';
    
    // $dbh is pdo connection
    $insertTable = $dbh->prepare($sql);
    
    $countArray = count($array);
    
    for ($i = 0; $i < $countArray; $i++) {
       $insertTable->bindParam(':value1', $array['value1'][$i], PDO::PARAM_INT); // if value is int
       $insertTable->bindParam(':value2', $array['value2'][$i], PDO::PARAM_STR); // if value is str
       $insertTable->bindParam(':value3', $array['value3'][$i], PDO::PARAM_STR);
       $insertTable->execute();
    }
    
    ?>
    

    入力名の形式

    amount_' . $x . ' アレイの投稿は次のようになります:

    [amount_0] => 100
    [amount_1] => 200
    [amount_2] => 1
    [quantity] => 10
    [quantity] => 20
    [quantity] => 1
    

    ただし、amount[]を書き込む場合 配列は次のようになります:

    [amount] => Array
        (
            [0] => 100
            [1] => 200
            [2] => 1
        )
    
    [quantity] => Array
        (
            [0] => 10
            [1] => 20
            [2] => 1
    

    最後のオプションを使用すると、配列の読み取りがはるかに良くなります。

    MYSQLIの例

    <?php
    $sql = 'INSERT INTO table (field1, field2, field3) VALUES (?, ?, ?)';
    $stmt = $mysqli->prepare($sql); 
    
    $countArray = count($array);
    
    for ($i = 0; $i < $countArray; $i++) {
    $stmt->bind_param('ssd', $array['value1'][$i], $array['value2'][$i], $array['value3'][$i]);
       $stmt->execute();
    } 
    ?>
    

    ご覧のとおり、立っているssd パラメータの前に、これらは4つのタイプがあります:

    • i=インテンジャー
    • s=文字列
    • d=ダブル
    • b =blob

    常にこれを定義する必要があります。

    編集

    これを使用する必要があります:

    <?php 
    // Parse the form data and add inventory item to the system
    if (isset($_POST['cartOutput'])) { 
    
    $sql= 'INSERT INTO orders (product_name, price, quantity, date_added) VALUES(?,?,?, NOW())';      
    
    $stmt = $myConnection->prepare($sql); 
    $countArray = count($_POST["item_name");
    for ($i = 0; $i < $countArray; $i++) {
    $stmt->bind_param('sss', $_POST['item_name'][$i], $_POST['amount'][$i], $_POST['quantity'][$i]);
    $stmt->execute();
    }
    
    echo $sql   ; 
    
    exit();
    }
    ?>
    


    1. ORDER BY句のパラメータをバインドしないと結果が順序付けられないのはなぜですか?

    2. mysqlの以前の値を削除せずに行を更新する

    3. ASCII()の例– MySQL

    4. データを複数のデータベースに分割することをお勧めしますか?