【问题标题】:php/mysqli - combined selecting/filtering database of two nested json objectsphp/mysqli - 两个嵌套 json 对象的组合选择/过滤数据库
【发布时间】:2017-08-24 22:42:51
【问题描述】:

我通过 $.ajax 将 json 发送到 php/mysqli。 json 有两个对象(数据和术语),其中术语总是有一个嵌套对象和数据:无、一个或多个……像这样:

搜索 value01 会发回这个 json:

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

...

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

【问题讨论】:

  • 不清楚,具体的问题是什么?您无法创建查询?查询返回错误值?
  • 我可能需要一些提示来处理这个问题,因为我对 php 还很陌生。我想我需要遍历对象数据?!如果为空,还有一些要排除的条件?!
  • 一定要清理进入查询的值,这样坏人就不能做坏事了。
  • 最好的方法是什么?
  • @PhilippM 关于您的更新:一般来说,永远不要吝啬安全性。总是在安全方面犯错。我的回答是否足够或有帮助?在 SO 上,您的问题需要一个公认的答案。请用绿色勾号标记我的或发布您自己的具体答案并给它一个绿色勾号。 (如果你选择后者,我希望我至少会因为提供帮助而获得支持。)

标签: php arrays json loops mysqli


【解决方案1】:
$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;";

【讨论】:

  • @PhilippM 如果我的回答解决了你的问题,请给它打个绿色的勾,否则让我知道什么不适合你。
  • 甜蜜!回显您的示例效果很好......但是如果我想将它嵌入到构建自动完成所需的 json 中......我在响应中没有得到任何回复,随后也没有下拉建议。请看我上面的更新
  • @PhilippM 我不认为我跟随。它到底在哪里断裂?需要修复什么?我必须有一些家庭时间,我稍后会回来。
  • 输入一个值并运行脚本后,我得到一个 [HTTP/1.1 500 Internal Server Error 10563ms] 并且请参阅我上面的编辑...。通常,显示建议大约需要一秒钟(在我运行的单个术语的示例中)。我正在尝试进行更多调试..顺便说一句,我最初正在查看此示例wowww.nl/2014/02/01/jquery-autocomplete-tutorial-php-mysql
  • @PhilippM 该错误可能是由于 json 对象无效。我们需要区分哪些有效,哪些无效。因为您的程序需要一个有效的 json 对象,所以让我们通过 json 对象返回所有错误/成功消息。首先,在包含我的 sn-p 之前,您的代码是否正常工作?您是否使用 $mysqli 连接到您的数据库;该声明未包含在您的脚本中(我只是在检查,它不需要存在于您的 SO 帖子中)?为 $mysqli->query() 创建一个 else 条件,将 mysqli->error() 推送到 json 对象中。
猜你喜欢
  • 2011-12-10
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 2020-03-08
  • 1970-01-01
  • 2020-07-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多