php为每个循环插入数据两次而不是每行按预期

时间:2015-07-07 20:49:20

标签: php mysql arrays json

我有一个使用JSON解码函数创建的关联php数组。

我试图将这个数组逐行插入到我的数据库中。

值正在插入但我正在重复最后一行。

PHP

<?php
include "config.php";


$gambatch =  $_POST["mydata"];
$myjson = json_decode($gambatch,true);
 foreach ($myjson as $row){
        //get the tweet details
        $name = $row[0];
        $points = $row[1];    
    }
 $sql1 = "INSERT INTO testjson(named,points)
            VALUES ('".$name."','".$points."')";

 if(!mysqli_query($con, $sql1))
       {
           die('Error : ' . mysql_error());
       }
if (!mysqli_query($con,$sql1)) {
  die('Error: ' . mysqli_error($con));
}

echo '<br><br><br><br><br><br>';
echo "data added";

json解码后,Json是从php转储的另一个页面:

array(2) { [0]=> array(7) { [0]=> string(6) "dddddd" [1]=> int(0) [2]=> int(0) [3]=> int(0) [4]=> int(0) [5]=> int(0) [6]=> int(0) } [1]=> array(7) { [0]=> string(7) "fffffff" [1]=> int(0) [2]=> int(0) [3]=> int(0) [4]=> int(0) [5]=> int(0) [6]=> int(0) } } 

这是完整的数组,但我只是尝试在上面的代码中插入每行中的前两个值)(最终我想插入所有,但我保持它变小,同时让它工作)。

这也是一个只有两个条目的数组,它最终将是动态的并且接受更多,因此代码需要足够灵活。我想我快到了?

我没有得到PHP错误,问题是重复的条目。它要么替换自己,要么我有一段我没有发现的循环代码。

非常感谢您的任何帮助

最后我将使用预备语句 - 使用这个危险的sql,因为它很容易模拟

1 个答案:

答案 0 :(得分:0)

经过深入阅读后,我得到了这个工作。我也添加了预备语句插入。

<?php
include "config.php";

$gambatch =  $_POST["mydata"];


$myjson = json_decode($gambatch,true);
$myLength= count($myjson);
//echo 'length is '.$myLength.'';
$query = $con->stmt_init();


for ($row = 0; $row <  $myLength; $row++) {
          $name = $myjson[$row][0];
       $points = $myjson[$row][1];
        //$sql1 = "INSERT INTO testjson(named,points)
       //     VALUES ('".$name."','".$points."')";
     $statement = $con->prepare( "INSERT INTO testjson (named,points)  VALUES (?,?) ");
     $statement->bind_param('si', $name, $points);
      $statement->execute();    


 }

//if (!mysqli_query($con,$sql1)) {
  //die('Error: ' . mysqli_error($con));
//}

//echo '<br><br><br><br><br><br>';
//echo "data added";
//} 
//mysqli_close($con);
$statement->close();

我已经离开了旧插件,因为它可能有助于在某处转换。

使用数组行长度作为上限需要for循环。这是使用count($ yourArray)提取的。上面是两列,可能是无限的行。

我对代码的唯一问题是我认为它可以更高效,因为我在循环内执行多次插入。如果有人可以解决,我会切换答案。