我有一个php函数getContactList()
:
$res = getContactList(trim($_POST['username']), trim($_POST['password']));
返回此数组:
$contactList[] = array('name' => $name, 'email' =>$email);
我需要将此数组的内容存储到MySQL数据库中。 不知怎的,我可以一次性将数据的全部内容存储在数据库中? 每次运行时数组项的数量都将超过500,所以我想避免通常的循环练习并在for循环中调用“Insert”语句,因为这需要很长时间才能执行。
注意:我需要将结果存储在单独的列中 - 一个用于名称,另一个用于电子邮件。在该数组中有500个项目,我需要插入500行 - 每行一个名称 - 电子邮件对。
答案 0 :(得分:6)
$values = array();
// the above array stores strings such as:
// ('username', 'user@domain.com')
// ('o\'brien', 'baaz@domain.com')
// etc
foreach($contactList as $i => $contact) {
$values[] = sprintf(
"('%s', '%s')",
mysql_real_escape_string($contact['name'], $an_open_mysql_connection_identifier),
mysql_real_escape_string($contact['email'], $an_open_mysql_connection_identifier)
);
}
$query = sprintf(
"INSERT INTO that_table(name, email) VALUES %s",
implode(",", $values)
);
答案 1 :(得分:5)
如果您尝试插入多行,即多次运行相同的查询,请使用prepared statement。 使用PDO,您可以执行以下操作:
// prepare statement
$stmt = $dbh->prepare("INSERT INTO contacts (email, name) VALUES (:email, :name);");
// execute it a few times
foreach($contactList as $contact) {
$stmt->bindValue(':email', $contact['email'], PDO::PARAM_STR);
$stmt->bindValue(':name', $contact['name'], PDO::PARAM_STR);
$stmt->execute();
}
PDO还会处理正确的字符串转义。
答案 2 :(得分:2)
使用标准的php序列化功能
$serData_str = serialize($contactList);
然后将其保存在DB
中从DB读取数据后,只需将其反序列化
$myData_arr = unserialize($serContactList);
答案 3 :(得分:0)
在循环中,您可以创建一个insert语句并在循环后执行它。 insert语句将包含所有内容。
该陈述看起来像
INSERT INTO employee (name) VALUES ('Arrayelement[1]'),('Arrayelement[2]'), ('Arrayelement[3]'),('Arrayelement[4]');