PHP-替换我的一部分

时间:2018-07-07 22:12:12

标签: php sql pdo slim

晚上好。我目前正在做一个学校项目,但被卡住了。 这是代码:

 foreach ($Pessoas as $key => $value) {
             $ids = $ids . " OR id_Pessoas = " . $Pessoas[$key]['id'];
         }

         if (substr($ids, 0, 3) == " OR ") {
             if (substr($ids, 0, strlen(" OR ")) == " OR ") {
                 $ids = substr($ids, strlen(" OR "));
             }
         }

这是我的PHP搜索系统控制器的一部分,我正尝试将其传递给模型。正如您可能已经想到的,我正在使用Slim Framework和PDO与MVC一起工作。 这个想法是搜索一个关键字,并使用该关键字搜索配置文件的名称或标签。我将首先使用以下查询来搜索个人资料名称:SELECT * FROM Pessoas WHERE nome LIKE :keyword AND hidden = 0,直到我尝试使用上面的代码获取ID之前,一切都很好,因此我可以生成一段代码来完成以下查询SELECT * FROM Pessoas_tags WHERE,但它不起作用。

上面代码背后的想法是生成类似" OR id_Pessoas = 1 OR id_Pessoas = 4"的东西,然后删除第一个" OR ",因此它没有给出错误,但是没有删除。我真的不知道为什么,那段代码不是我真正的代码,但是我不知道我从哪里获得的,因为它是几个月前的。

我希望这只是一个愚蠢的错误。如果您不是这样做,而是有更好的解决方案,我也非常感谢您在这里分享。感谢您的耐心配合和提前帮助。

1 个答案:

答案 0 :(得分:0)

您的代码有问题。这应该删除“ OR”:

foreach ($Pessoas as $key => $value) {
  $ids = $ids . " OR id_Pessoas = " . $Pessoas[$key]['id'];
}

if (!empty($ids) && substr($ids, 0, strlen(" OR ")) == " OR ") {
  $ids = substr($ids, strlen(" OR "));
}

或者,由于条件为OR,因此您可以添加一个始终为false的无效语句,而无需删除任何“ OR”即可使其生效。像这样:

$ids = "1 != 1";
foreach ($Pessoas as $key => $value) {
  $ids = $ids . " OR id_Pessoas = " . $Pessoas[$key]['id'];
}