php函数返回空的json字符串

时间:2017-06-30 18:11:00

标签: php json ajax

我有一个php函数,可以将表单数据插入到多个表中。我想回归' true'到JSON响应。这是我尝试过的代码,但它返回空字符串。为什么会这样?有什么建议?

function insertStores($params)
{
    $img = $_FILES['sm_image']['name'];
    $chk=mysqli_query($this->conn,"select * from store_manufacture where sm_brand_name='".$params['sm_name']."'");
    if(mysqli_num_rows($chk)==0) {
        $query = "INSERT INTO store_manufacture (sm_brand_name,sm_image, sm_link, sm_description,sm_display) VALUES('" . $params["sm_name"] . "','" . $img . "', '" . $params["sm_link"] . "','" . $params["sm_desc"] . "','" . $params["sm_switch"] . "');  ";

        $result = mysqli_query($this->conn, $query);
        if ($result) {
            $store_id = mysqli_insert_id($this->conn);
            foreach ($params['categories_chk'] as $cat_id => $name) {
                $query2 = "insert into store_category values ('',$store_id,$cat_id)";
                $result2 = mysqli_query($this->conn, $query2);
                $sourcePath = $_FILES['sm_image']['tmp_name']; 
                $targetPath = "images/" . $img; 
                move_uploaded_file($sourcePath, $targetPath); 
            }
        }
        echo json_encode($result);
    }
}

2 个答案:

答案 0 :(得分:0)

你有几个问题。

$result不是布尔值,而是查询结果对象。如果结果失败,它只是一个布尔值,在这种情况下它将是假的。但是,如果您的查询成功,它将是一个查询结果对象,您无法将其转换为json。此外,即使它是一个布尔值,你仍然不想将它转换为json,也不想遵循一些有效地让你返回true或{{的文字字符串的建议。 1}}。

原因是因为即使json_encoding一个布尔值:

false

PHP允许,它会返回:

echo json_encode( true );

哪个是无效的JSON。大多数客户端库在被告知期望JSON时,如果遇到非JSON结果将抛出错误。这不是JSON。相反,你需要提出一些有效的JSON来返回。它甚至可以像这样简单(手动构建:

true

这将产生以下其中一个的有效JSON文档:

return json_encode( [ 'success' => $result ? true : false ] )

{ "success": true }

然后调整客户端库以搜索返回的JSON文档的{ "success": false } 键。

此外,您应该真的使用准备好的参数。我猜你的SQL注入漏洞的可能性很高。

答案 1 :(得分:-1)

我认为您必须传递给json_encode数组,例如'a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5
您的查询为INSERT,返回TrueFalse
您可以尝试格式化数组,例如:

$result = array ("result"=> $result) 
json_encode($result)