ajax动态对象(关联数组)通过PDO分成两个MySQL表

时间:2013-09-02 16:44:16

标签: php mysql pdo

我有一个js动态对象,我通过JSON.stringify(obj_to_str);

“字符串化”

我能够在超全局$_POST下的php文件中接收此对象。对象的格式(一次在$ _POST超全局中)如下所示:{"6869lx":"mds","2416ex":"mdr","5126mv":"mdf","7079px":"dtr","5350ds":"dts"}。 我希望能够将每个键值pare插入到不同的列中 - 例如:6869lx到名为'key'的列中,并且在另一列上称为'cat',mds的同一行上。

我遇到的问题是准备一个动态PDO语句将这个js对象插入到两个不同的MySQL列中(考虑到事前我不知道对象的长度)。我还读到,如果对象非常大,for循环(或任何类型的php循环)会减慢插入过程。

有可能吗? 这样做的最佳方式是什么? 非常感谢。

1 个答案:

答案 0 :(得分:2)

这是你如何做到的:

$data = json_decode($_POST['data'], true);
$stmt = $pdo->prepare("INSERT INTO yourtable (key, cat) VALUES (:key, :cat)");
$stmt->bindParam(':key', $key);
$stmt->bindParam(':cat', $cat);
foreach ($data as $key => $cat) {
    $stmt->execute();
}

要进行多行插入,您可以执行以下操作:

$data = json_decode($_POST['data'], true);
$values = implode(', ', array_fill(0, count($data), '(?, ?)'));
$stmt = $pdo->prepare("INSERT INTO yourtable (key, cat) VALUES " . $values);
$i = 1;
foreach ($data as $key => $cat) {
    $stmt->bindValue($i++, $key);
    $stmt->bindValue($i++, $cat);
}
$stmt->execute();