【问题标题】:implode() array to insert record into mySql databaseimplode() 数组将记录插入到 mySql 数据库中
【发布时间】:2013-07-19 23:41:32
【问题描述】:

我在 PHP 数组中有一行,我想将该行插入到 mySQL 数据库中,方法是将键和值内爆到一个字符串中,并在我的 Insert 语句中使用这些字符串,如下所示:

$fields = implode(",", array_keys($_POST));
$newdata = implode(",", $_POST);

$query = (
"INSERT INTO Food_entered ($fields)
VALUES ('$newdata')");

$result = mysqli_query($dbc, $query);

我能够创建字符串,并且它们的格式似乎正确,但是没有插入行。似乎是一种简单的方法,但不确定我缺少什么。

【问题讨论】:

  • 你从$result得到什么?
  • 嗯....列数与第 1 行的值数不匹配。我以为我检查过了。不知道为什么当我有相同数量的键和值时。

标签: php insert mysqli implode


【解决方案1】:

正如@Barmar 所指出的,问题在于你的引号在你的变量之外。

我认为这可能比 Barmar 发布的方法更容易遵循/更清洁:

$newdata = "'" . implode("','", $_POST) . "'";

【讨论】:

  • 我明白了。我只需要在 implode 之前删除双引号,你的建议就可以了。
【解决方案2】:

您需要引用每个值,而不是整个值列表:

$fields = implode(",", array_keys($_POST));
$newdata = implode(",", array_map(function($x) use ($dbc) {
    return "'" . $dbc->real_escape_string($x) . "'";
}, $_POST));

$query = (
"INSERT INTO Food_entered ($fields)
VALUES ($newdata)");

$result = mysqli_query($dbc, $query);

【讨论】:

  • 你好 Barmar ,好心,这看起来让事情变得非常自动化。如果行很多,这行得通吗?还是需要一些循环?
  • @Robert 如果您尝试在一次插入中使用多个 VALUES 列表,请确保不要超过 max_allowed_packet
  • 嗨,Barmar,谢谢您的回复。好吧,行数不会超过 20 或最多 30。关键是我是新手。我在 stackoverflow stackoverflow.com/questions/45349503/… 上创建了一个问题,你能帮我吗?谢谢你。
  • 或者这个解决方案完全适用于我的问题?如果是,只需将其粘贴在那里,我还将提供以将其标记为已接受(显然):-)。谢谢你帮助这个菜鸟;-)
  • 哎哟!完美,感谢您提供重复的问题链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-05
  • 2013-11-23
  • 2017-01-15
相关资源
最近更新 更多