我有一个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);
}
}
答案 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
,返回True
或False
。
您可以尝试格式化数组,例如:
$result = array ("result"=> $result)
json_encode($result)