我试图将Android中的数据作为JSON发送到PHP,以便解析它并保存在MySQL DB中
这是PHP CODE的一部分
$JsonString = $_POST["DATA"];
$JsonData = json_decode($JsonString, TRUE);
$Add_First_Only = 0;
foreach ($JsonData['items'] as $item)
{
$Order_ID = $item['Order_ID'];
$Order_Row_Number = $item['Order_Row_Number'];
$Order_Item_ID = $item['Order_Item_ID'];
$Order_Course_ID = $item['Order_Course_ID'];
$Order_Seat_No = $item['Order_Seat_No'];
$Order_Row_Value_wo_Options = $item['Order_Row_Value_wo_Options'];
$Order_Row_Value_with_options = $item['Order_Row_Value_with_options'];
if ($Add_First_Only == 0)
{
$result = mysqli_query($con,
"INSERT INTO order_items (Order_ID,Order_Row_Number,Order_Item_ID,Order_Course_ID,Order_Seat_No,Order_Row_Value_wo_Options, Order_Row_Value_with_options)
VALUES
(['$Order_ID'],['$Order_Row_Number'],['$Order_Item_ID'],['$Order_Course_ID'],
['$Order_Seat_No'],['$Order_Row_Value_wo_Options'],['$Order_Row_Value_with_options'])"
);
$Add_First_Only = 1;
}
}
这是我在Eclipse LogCAT上得到的错误
12-16 02:00:01.800:V / TAG(1841):错误:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以便在'['26'],['1'],['1'],['1'],['1'],['附近使用正确的语法第4行的''',['1'])'
正如你可以从错误中看到的那样,我自己拥有变量的值,所以它们不是空值
问题是我应该更改或添加到我的sql语法以修复此错误?
答案 0 :(得分:1)
不要使用方括号将参数包装在SQL statemenst中(例如:['$Order_ID']
)。
我经常发现echo
或error_log
对创建的SQL语句有帮助,并尝试在SQL工具中运行它。这应该为您提供更好的错误消息,并显示语法错误(如果该工具具有语法突出显示)。
另外,看看php.net对prepared statements的看法。这种类型的SQL语句容易受到SQL注入攻击,这是攻击系统最常见的方法之一。
答案 1 :(得分:1)
删除['$Order_ID']
和其他
对'$Order_ID'
['$Order_ID']
代替VALUES
等
if ($Add_First_Only == 0)
{
$result = mysqli_query($con,
"INSERT INTO order_items (Order_ID,Order_Row_Number,Order_Item_ID,Order_Course_ID,Order_Seat_No,Order_Row_Value_wo_Options, Order_Row_Value_with_options)
VALUES
('$Order_ID','$Order_Row_Number','$Order_Item_ID','$Order_Course_ID',
'$Order_Seat_No','$Order_Row_Value_wo_Options','$Order_Row_Value_with_options')"
);
$Add_First_Only = 1;
}
答案 2 :(得分:0)
当你在要插入数据库的数据周围使用单引号时,你告诉PHP这个数据是字符串类型,你的数据库可能需要INTEGER数据。