【发布时间】:2017-05-10 10:47:38
【问题描述】:
我将 json 提取到 php 对象中,并开始将来自该对象的数据放入数据库。我在 json 中有 20 个用户,每个人都成功地进入了数据库,除了一个姓 O'Carolan 的用户。我认为那个错误就在那个单引号中,关于那个。我阅读了有关 sql 注入的所有内容,并尝试了我在 stackoverflow 上找到的所有内容,但出现了类似的错误,但仍然无法正常工作。我也尝试使用 PDO 并准备好声明,但仍然无法正常工作。在这里我总是得到一个错误:你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行的 ''male')' 附近使用正确的语法。此外,当从 json 打印出用户时,它会正确打印它们并且那里一切正常,只是第三个用户O'carolan 不会进入数据库。 我的 json 在http://dev.30hills.com/data.json,我的代码是:
<?php
$servername = "localhost";
$username = "root";
$password = "";
$db = "30hills";
// Create connection
$conn = new mysqli($servername, $username, $password, $db);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$json_string = 'http://dev.30hills.com/data.json';
$jsondata = file_get_contents($json_string);
$obj = json_decode($jsondata, false);
$elementCount = count($obj);
for ($x = 0; $x < $elementCount; $x++) {
$id = $obj[$x]->id;
$firstname = $obj[$x]->firstName;
$surname = $obj[$x]->surname;
//if (preg_match('/'.$special_chars.'/', $surname)){
// $surname = str_replace("'","",$surname);
//}
$age = $obj[$x]->age;
$gender = $obj[$x]->gender;
echo $id;
echo " ";
echo $firstname;
echo " ";
echo $surname;
echo "<br>";
mysqli_query($conn, "INSERT INTO user (`id`, `firstName`, `surname`, `age`, `gender`)
VALUES($id, '$firstname', '" . $surname . "', $age, '$gender')")
or die(mysqli_error($conn));
?>
【问题讨论】:
-
"O'Carolan"存在于 JSON 中。正确地逃脱它们。 -
是的,但是如何?我尝试了一切,我还将“O'Carolan”字符串设为“OCarolan”,但它仍然不会将他插入数据库@SougataBose
-
双引号“O''Carolan”,您也可以查看以下答案stackoverflow.com/questions/1912095/…
-
我也试过了,还是不行。当它打印出来时,它打印得很好,但不会插入该行@MilosNikolik
-
我现在发现了错误。这是因为第三个用户的 json 中的 age = null 。由于年龄 @FMashiro 的空值,它不会将该行插入数据库