【问题标题】:Trying to insert column data into mysql from json array试图从json数组将列数据插入mysql
【发布时间】:2020-04-30 10:24:17
【问题描述】:

我正在尝试使用 php 将 JSON 数组(对象?!)插入 mysql。当数据以行的形式出现时,我可以处理!但是,我不得不以不同的方式导出数组,现在我无法弄清楚。在$array=json_decode($posted,true); 之后,我的数组看起来像:

(
    [0] => Array
        (
            [0] => Allen, test
            [1] => Anderson, Jayson
            [2] => Barrett, Kayla
            [3] => Bennett, Amira
        )

    [1] => Array
        (
            [0] => testallen@gmail.com
            [1] => testjayson@yahoo.com
            [2] => testkayla@gmail.com
            [3] => testamira@hotmail.com
        )
)

我怎样才能把它放到一个输出的foreach循环中:

insert into table (name, email) values("Allen, test","testallen@gmail.com")
insert into table (name, email) values("Anderson, Jayson","testjayson@yahoo.com")
... etc?

当数据是“行”格式时,这对我来说很容易..

          foreach($array as $row)
          {   
$query="insert into table (name, email) values(\"$row[0]\",\"$row[1]\")";
$doit = mysqli_query($con,$query);
          }

但是现在数组不是成行通过的,我不太明白。

【问题讨论】:

  • 您将需要使用此处的索引来访问另一个数组中的相应数据(或两者兼而有之,你们将foreach 切换为for 循环。)

标签: php mysql arrays


【解决方案1】:

一种方法是循环 $row[0] 并使用键获取两个值:

foreach($row[0] as $key => $value) {
    $name = $row[0][$key];
    $email = $row[1][$key];
    $query = "insert into table (name, email) values('$name', '$email')";
    $doit = mysqli_query($con,$query);
}

Working sample

但是,我强烈建议您在查询中使用 prepared statements 而不是字符串变量,以防止 SQL 注入攻击。

【讨论】:

  • 这样更好吗:$stmt = $con->prepare("INSERT INTO TemporaryUserEmail (name, email) VALUES (?, ?)"); $stmt->bind_param("ss", $name, $email); foreach($row[0] as $key => $value) { $name = $row[0][$key]; $email = $row[1][$key]; $stmt->execute(); } $stmt->close(); $con->close();
  • 是的,我认为 bind_param() 应该在循环中,但我刚刚检查过,这样看起来是正确的。使用准备好的语句会更好
  • 它在循环内部和外部都有效。我把 bind_param 放在哪里有关系吗?哪种方式更有效?
  • 在外面看起来实际上更好,你可以做一次总是更好。感谢您倾听我的意见并使用准备好的陈述。我很高兴能帮上忙。
猜你喜欢
  • 1970-01-01
  • 2014-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-26
  • 2012-04-28
  • 2013-05-17
  • 2013-03-25
相关资源
最近更新 更多