我想在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中使用,代码工作正常并成功插入数据。有人帮助我..
答案 0 :(得分:0)
不是一个完整的答案,而是观察到您的代码容易受到 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')作为你的连接变量 - 希望你的代码中没有这个。
我无法确定,但您的代码可能会混淆了面向对象的OO(面向对象)和程序形式的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 "
}
......你对结果不满意。
答案 1 :(得分:0)
我遇到了类似的问题,原因是启用了PHP魔术引号,并将转义字符添加到json字符串。尝试禁用php.ini中的魔术引号:
magic_quotes_gpc =关