Intereting Posts

Как вставить массив данных в mysql, используя php

В настоящее время у меня есть массив, который выглядит следующим образом при выходе через print_r ();

Array ( [0] => Array ( [R_ID] => 32 [email] => a@a.com [name] => Bob ) [1] => Array ( [R_ID] => 32 [email] => b@b.com [name] => Dan ) [2] => Array ( [R_ID] => 32 [email] => c@c.com [name] => Paul ) [3] => Array ( [R_ID] => 35 [email] => d@d.com [name] => Mike ) ) 

Я хотел бы вставить эти данные в одну таблицу с каждым значением элемента, принадлежащим соответствующему полю.

В настоящее время мой PHP-код выглядит следующим образом

 if(is_array($EMailArr)){ foreach($EMailArr as $R_ID => $email => $name){ $sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) values ('$R_ID', '$email', '$name')"; mysql_query($sql) or exit(mysql_error()); } } 

* Примечание: R_ID НЕ является основным ключом в этой таблице. *

Может кто-нибудь помочь мне понять, как я должен подойти к этой ситуации? Спасибо за чтение и вашу помощь!

С уважением.

Solutions Collecting From Web of "Как вставить массив данных в mysql, используя php"

Я бы не стал делать запрос для каждой записи.

 if(is_array($EMailArr)){ $sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) values "; $valuesArr = array(); foreach($EMailArr as $row){ $R_ID = (int) $row['R_ID']; $email = mysql_real_escape_string( $row['email'] ); $name = mysql_real_escape_string( $row['name'] ); $valuesArr[] = "('$R_ID', '$email', '$name')"; } $sql .= implode(',', $valuesArr); mysql_query($sql) or exit(mysql_error()); } 

Прежде всего, вы должны прекратить использование mysql_ *. MySQL поддерживает множественную вставку, как

 INSERT INTO example VALUES (100, 'Name 1', 'Value 1', 'Other 1'), (101, 'Name 2', 'Value 2', 'Other 2'), (102, 'Name 3', 'Value 3', 'Other 3'), (103, 'Name 4', 'Value 4', 'Other 4'); 

Вам просто нужно построить одну строку в вашем цикле foreach, который выглядит так

 $values = "(100, 'Name 1', 'Value 1', 'Other 1'), (100, 'Name 1', 'Value 1', 'Other 1'), (100, 'Name 1', 'Value 1', 'Other 1')"; 

а затем вставьте его после цикла

 $sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) VALUES ".$values; 

Другой способ – Подготовленные заявления , которые еще более подходят для вашей ситуации.

 if(is_array($EMailArr)){ foreach($EMailArr as $key => $value){ $R_ID = (int) $value['R_ID']; $email = mysql_real_escape_string( $value['email'] ); $name = mysql_real_escape_string( $value['name'] ); $sql = "INSERT INTO email_list (R_ID, EMAIL, NAME) values ('$R_ID', '$email', '$name')"; mysql_query($sql) or exit(mysql_error()); } } 

Лучшее примерное решение с PDO:

  $q = $sql->prepare("INSERT INTO `email_list` SET `R_ID` = ?, `EMAIL` = ?, `NAME` = ?"); foreach($EMailArr as $value){ $q ->execute( array( $value['R_ID'], $value['email'], $value['name'] )); }