将数据发布到mysql DB

时间:2013-12-15 23:05:29

标签: php android mysql sql

我试图将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语法以修复此错误?

3 个答案:

答案 0 :(得分:1)

不要使用方括号将参数包装在SQL statemenst中(例如:['$Order_ID'])。

我经常发现echoerror_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数据。