将数组内容存储在数据库中

时间:2011-10-21 09:58:31

标签: php mysql arrays bulkinsert

我有一个php函数getContactList()

$res = getContactList(trim($_POST['username']), trim($_POST['password']));

返回此数组:

$contactList[] = array('name' => $name, 'email' =>$email);

我需要将此数组的内容存储到MySQL数据库中。 不知怎的,我可以一次性将数据的全部内容存储在数据库中? 每次运行时数组项的数量都将超过500,所以我想避免通常的循环练习并在for循环中调用“Insert”语句,因为这需要很长时间才能执行。

注意:我需要将结果存储在单独的列中 - 一个用于名称,另一个用于电子邮件。在该数组中有500个项目,我需要插入500行 - 每行一个名称 - 电子邮件对。

4 个答案:

答案 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]');