为foreach()警告提供的参数无效

我想在MySQL表中插入json数组数据。 我写了这段代码。

if (mysqli_connect_errno()){
    $response["success"] = 0;
    $response["message"] = "Database Error!";   
    die(json_encode($response));
    echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

// Check connection
if ($con->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
echo "Connected successfully";

if(isset($_GET['doctorJson'])){

    $json = $_GET['doctorJson'];

    $array = json_decode($json, true);

    foreach($array as $item){

        $result = mysqli_query($con, "INSERT IGNORE INTO doctor_visit_track (id, doctor_name, doctor_email, date, time) VALUES 
            ('".$item['id']."', '".$item['doctorName']."', '".$item['doctorEmail']."', '".$item['date']."', '".$item['time']."')");

            }

    if($result){
        $response["message"] = "Success";
        echo json_encode($response);
    } else{
        $response["message"] = "Failure";
        echo json_encode($response);
        }
    }

mysqli_close($con);

当我使用xampp时,以上代码工作正常。 但是,当我将这段代码上传到服务器时,同样的代码会发出警告“为foreach()提供的无效参数”,而不是插入到表中。 但在xampp中使用,代码工作正常,并成功插入数据。 来人帮帮我..


不是完整的答案,而是观察到您的代码易受SQL注入的影响 。 尝试:

$sql = <<<EOF
INSERT IGNORE INTO 
  doctor_visit_track (id, doctor_name, doctor_email, date, time) VALUES 
  ('?', '?', '?', '?"', '?')")
EOF;

$stmt = mysqli_prepare( $con, $sql);

foreach ($array as $item){
    mysqli_stmt_bind_param( $stmt, "sssss",
      $item['id'], $item['doctorName'], $item['doctorEmail'],
      $item['date'],$item['time']
      );
    $result = mysqli_stmt_execute($stmt);
    // rest of your code
};    

顺便说一句,你也有$ con和$ conn(2'n')作为连接变量 - 希望你的代码中没有这个。

我无法确定,但是您的代码可能会混淆mysqli的面向对象(面向对象)和过程形式。 坚持一个或另一个(理想的OO形式)

例如,在您的原始代码中,说有人向您发送了类似于以下内容的恶意JSON对象:

{
"id" : "hackerid",
"doctorName" : "I am a Hacker",
"doctorEmail": "hacker@hacker.com",
"date": "1999-12-31",
"time": ""); drop table doctor_visit_track; -- Muhahahaha "
}

...你不会对结果感到满意。


我遇到了类似的问题,原因是启用了PHP魔术引号,并将转义字符添加到了json字符串中。 尝试在php.ini中禁用魔术引号:

magic_quotes_gpc =关

链接地址: http://www.djcxy.com/p/53061.html

上一篇: Invalid argument supplied for foreach() warning

下一篇: Invalid argument for foreach