php/mysqli-组合选择/过滤两个嵌套json对象的数据库

php/mysqli-组合选择/过滤两个嵌套json对象的数据库,php,arrays,json,loops,mysqli,Php,Arrays,Json,Loops,Mysqli,我正在通过$.ajax向php/mysqli发送json。json有两个对象(数据和术语),其中术语始终有一个嵌套对象和数据:无、一个或多个。。。像这样: 搜索value01将返回此json: {"data":{"tags":[{"tag":"value01"},{"tag":"value02"},{"tag":"value03"}]},"terms":{"term":"value04"}} 考虑到上述情况,尤其是$arr['data']['tags'][0]['tag']也可以为空,我现在

我正在通过$.ajax向php/mysqli发送json。json有两个对象(数据和术语),其中术语始终有一个嵌套对象和数据:无、一个或多个。。。像这样:

搜索value01将返回此json:

{"data":{"tags":[{"tag":"value01"},{"tag":"value02"},{"tag":"value03"}]},"terms":{"term":"value04"}}


考虑到上述情况,尤其是$arr['data']['tags'][0]['tag']也可以为空,我现在如何根据对象中给定的值筛选数据库?

不清楚,确切的问题是什么?您不能创建查询吗?查询返回错误的值?我可能需要一些提示来处理这个问题,因为我对php还比较陌生。我想我需要在对象数据上循环?!如果为空,则排除某些条件?!一定要清理进入查询的值,这样坏人就不会做坏事。最好的方法是什么?@PhilippM关于你的更新:一般来说,永远不要吝啬于安全性。总是犯安全的错误。我的回答是否足够或有用?因此,你的问题需要一个公认的答案。请在我的答案上打一个绿色的勾号,或者发布你自己的具体答案,并给它一个绿色的勾号。(如果你做了后者,我希望我至少能赢得一张对你有帮助的选票。)@PhilippM如果我的答案解决了你的问题,请给它绿色的勾号,否则让我知道什么不适合你。太好了!回显你的样本效果很好。。。但是如果我想将它嵌入到构建自动完成所需的json中。。。我在回复中没有得到任何回复,随后也没有建议的下拉列表。请看我的更新above@PhilippM我想我不明白。它到底在哪里断裂?需要修复什么?我必须有一些家庭时间,我稍后会回来。在输入一个值并运行脚本后,我得到一个[HTTP/1.1500内部服务器错误10563ms],也请参见上面的编辑。通常,建议显示出来需要大约一秒钟的时间(在一个例子中,我只运行了一个术语)。我正在试着做更多的调试。。顺便说一句,最初我在看这个例子@PhilippM,这个错误可能是由于一个无效的json对象造成的。我们需要隔离哪些有效,哪些无效。因为您的程序需要一个有效的json对象,所以让我们通过json对象返回所有错误/成功消息。首先,在包含我的代码片段之前,您的代码是否正常工作?您是否使用$mysqli连接到数据库;该声明没有包含在您的脚本中(我只是检查一下,它不需要存在于您的SO帖子中)?为
$mysqli->query()
创建一个else条件,该条件将
mysqli->error()
推送到json对象中。
$data=file_get_contents("php://input");
//$data='{"data":{"tags":[{"tag":"value01"},{"tag":"value02"},{"tag":"value03"},{"tag":"value04"}]},"terms":{"term":"value05"}}';

$arr=json_decode($data,true);
$mysqli=new mysqli(...);  // do this appropriately
$query="SELECT * FROM accounts WHERE name LIKE '%".$mysqli->real_escape_string($arr['terms']['term'])."%'";
foreach($arr['data']['tags'] as $array){
    $tag=$array['tag'];
    $query.=" AND `name` LIKE '%".$mysqli->real_escape_string($tag)."%'";
}
$query.=" ORDER BY name;";