SQL更新方法返回JSONException

时间:2015-05-20 22:02:34

标签: php android mysql json sql-update

我的服务器上有一个简单的MySQL表,有4个字段。 pidaidunameactive。我通过我的Android应用程序将uname变量发送到我的PHP代码,我想将布尔active列从1更改为0,其中uname字段等于我发送的值通过应用程序。这是我的代码: 我从android应用程序发送的值在index.php中就像这样接收并传递给DB_Functions.php中的另一个函数

else if ($tag == 'notpart'){

    $uname = $_POST['uname'];
    $notpart = $db->notpart($uname);

    if (!empty($notpart)) {
            // stored successfully
        $response["success"] = 1;
        //$response["notpart"]["aid"] = $notpart["aid"];
        $response["notpart"]["uname"] = $notpart["uname"];

            echo json_encode($response);
        } 
        else {
            // failed to store
            $response["error"] = 1;
            //$response["error_msg"] = "JSON Error occured";
            $response["error_msg"] = mysql_error();
            echo json_encode($response);
        }


}   

DB_Functions.php中的函数: 更新:将$uname更改为'$uname'。现在IllegalStringOffset警告消失但JSONException存在

public function notpart($uname) {
    $uuid = uniqid('', true);
    echo $uname;
    $result = mysql_query("UPDATE part SET active='0' WHERE uname = $uname");
    // check for successful store
    if ($result) {
         //get event details 
        $pid = mysql_insert_id(); // last inserted id
        $result = mysql_query("SELECT * FROM part WHERE pid = $pid");
         //return event details
        return mysql_fetch_array($result);
    } else {
        return mysql_error();
    }
}

但是我收到了一个Illegal String偏移警告,并且没有对MySQL表进行任何更改。

这是logcat:

05-20 21:57:26.958: E/JSON(17919): wwwww<br />n<b>Warning</b>:  Illegal string offset 'uname' in <b>C:\xampp\htdocs\shareity\shareity\index.php</b> on line <b>445</b><br />n{"tag":"notpart","success":1,"error":0,"notpart":{"uname":"U"}}n
05-20 21:57:26.958: E/JSON Parser(17919): Error parsing data org.json.JSONException: Value wwwww<br of type java.lang.String cannot be converted to JSONObject

我尝试isset!empty方法尝试发送非法偏移错误,但没有任何效果。有人可以告诉我有什么问题吗?感谢

1 个答案:

答案 0 :(得分:1)

$result = mysql_query("UPDATE part SET active='0' WHERE uname = $uname");

试试这个:

$result = mysql_query("UPDATE part SET active='0' WHERE `uname` = '$uname'");

另请注意,您已将有效设置为'0',而不是0。如果活动字段类型为INT,则将其更改为0.

另外,您正在向yourelf询问SQLInjection。使用mysql_real_escape_string()

此外,请勿使用mysql(已弃用)扩展程序。切换到mysqliPDO

要修复的最后一件事是删除echo $uname;它会破坏json响应,将uname添加到输出中。这可能会破坏你的json。