Php ajax动态对象(类似于关联数组)通过PDO转换为两个MySQL表

Php ajax动态对象(类似于关联数组)通过PDO转换为两个MySQL表,php,mysql,pdo,Php,Mysql,Pdo,我有一个js动态对象,我通过JSON.stringify(obj_to_str)将其“字符串化” 我能够在超级全局$\u POST下的php文件中接收此对象。对象的格式(在$_postsuper global中)如下所示:{“6869lx”:“mds”,“2416ex”:“mdr”,“5126mv”:“mdf”,“7079px”:“dtr”,“5350ds”:“dts”}。 我希望能够将每个键值pare插入到一个不同的列中—例如:6869lx插入一个名为“key”的列中,并在另一个名为“cat”

我有一个js动态对象,我通过
JSON.stringify(obj_to_str)将其“字符串化”

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

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

可能吗? 最好的方法是什么? 提前多谢。

以下是您的操作方法:

$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();

您能否显示应该从此数据生成的INSERT查询?如何根据对象中的键确定表和列?嗨,Barmar,谢谢你的回答。插入查询将根据PDO处理多表插入的方式进行精心编制。我还没有。我希望社区能给我举个例子。:)表是key、cat和id。id是自动生成的,key是键值pare的第一部分:(68691lx),它们的“cat”是(mds)。下一组也一样。没有多表插入这样的事情。一次只能在一个表中插入。您似乎误用了术语。您正在调用列表。感谢您捕获…尝试编辑它。是的,我的意思是列。在多行示例中,$count变量是什么?我尝试使用它时出错了?谢谢。我想我知道问题出在哪里了。count函数count不是一个变量,对吗?是的,修复了这个错误。谢谢。现在,“内爆(',',数组填充(0,计数($data),'(?,?));”将(?,(?,?)分配给我的$values变量。我缺少什么?如果I var_dump($data)看起来都不错,但是$value没有显示任何内容。在检查$data中是否有值后,我继续复制/粘贴行:“$values=内爆(',',数组填充(0,计数($data),'(?,?));”。知道为什么var_转储($values);输出(?,,(?,?)?这就是
$values
应该具备的功能。
是与
bindValue
绑定的值的占位符。