2015-05-16 3 views
1

Пожалуйста, помогите мне. В нижнем коде запрос будет выполняться 3 раза, значит выполнение запроса будет зависеть от количества элементов в массиве. Пожалуйста, наставит меня, как запустить этот запрос с установкой всех данных сразуКак вставить несколько значений в один запрос

$products = array("shirt" , "paint" , "socks"); 
    $price = array("200" , "600" , "50"); 
    $quantity = array("3" , "2" , "2"); 

     $num = 0; while($num <= count($products)) 
     { 
      $mysqli->query("insert into new_order set 
          product = '".$products[$num]."' , 
          price = '".$price[$num]."' , 
          quantity = '".$quantity[$num]."' 
          "); 

          $num++; 
     } 
+0

проверки http://stackoverflow.com/questions/452859/inserting-multiple-rows-in-a-single-sql-query –

+0

благодаря @AmanRawat позвольте мне проверить это –

+0

Вы можете также использовать одну транзакцию для нескольких запросы, которые намного быстрее, чем большой запрос, проверьте это: http://stackoverflow.com/a/30018150/3799829 – Bobot

ответ

2

Он не будет бросать какую-либо ошибки до тех пор пока вы» будет получать одинаковое количество значений в массиве

$counts = count($products); 
$query = "insert into new_order (product,price,quantity) values "; 
foreach($products as $key => $value){ 
    $query .= "('$value','$price[$key]','$quantity[$key]')"; 
    $query .= (++$key == $counts) ? '' : ','; 
} 
$mysqli->query($query); 

запроса выглядит следующим образом:

//insert into new_order (product,price,quantity) values('shirt','200','3'),('paint','600','2'),('socks','50','2') 
+0

спасибо @Uchiha, хорошее предложение –

+0

@AftabAhmad Рад помочь .. –

+0

@ Uchiha довольно, но вы делаете 'count ($ products)' в цикле, должны сохранять его перед циклом; p – Bobot

2

итерации по каждому пункту в $products построить $sql строки:

$sql = "insert into new_order(product, price, quantity) values "; 
for($i=0;$i<count($products);$i++){ 
    $sql .= "({$products[$i]}, {$price[$i]}, {$quantity[$i]}),"; 
} 
$sql = substr($sql,0,-1); //cut off the trailing comma 
$mysqli->query($sql); 

// insert into new_order(product, price, quantity) values (shirt, 200, 3),(paint, 600, 2),(socks, 50, 2) 
+0

не забудьте защитить свои данные ^^ – Bobot

+0

Большое спасибо, я понял, как чтобы сделать это ,,, Спасибо еще раз –

+1

@ Bob0t yup dear, я обеспечу его, но я был смущен для такой идеи, теперь он решил :) –

Смежные вопросы