sql >> Database >  >> RDS >> Mysql

Hoe bestelgegevens uit een multidimensionale array in te voegen

Mijn voorbeeld gebruik PDO, maar ik denk dat je het idee begrijpt, je moet ook naar PDO of MYSQLI gaan in plaats van mysql

het voorbeeld:

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

?>

Invoernaamformaat

Ik zie dat je dit doet:amount_' . $x . ' je matrixpost ziet er als volgt uit:

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

maar als je amount[] write schrijft de array ziet er als volgt uit:

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

[quantity] => Array
    (
        [0] => 10
        [1] => 20
        [2] => 1

De laatste optie maakt het veel beter om de array te lezen.

MYSQLI-voorbeeld

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

Zoals je kunt zien staat er ssd voor de parameters zijn dit de types er zijn 4 types:

  • i =intenser
  • s =tekenreeks
  • d =dubbel
  • b =blob

U moet dit altijd definiëren.

Bewerken

Je zou dit moeten gebruiken:

<?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. 504 Gateway Timeout-fout bij het selecteren van 300.000 rijen uit de MySQL-database

  2. MYSQL:Kun je resultaten ophalen die overeenkomen met 3 van de 4 uitdrukkingen?

  3. Onbekende primaire sleutel voor tafel krijgen terwijl de ID er is

  4. Hoe gebruik ik outer full join in laravel 5.0?