【发布时间】:2021-05-10 12:33:54
【问题描述】:
我正在我的网站上使用准备好的语句来实现 OOP PHP。
我有以下表名,“table”:
| rowID | id1 | id2 | name1 | name2 |
|---|---|---|---|---|
| 1 | 55 | 56 | name55 | name56 |
| 2 | 55 | 60 | name55 | name60 |
| 3 | 54 | 55 | name54 | name55 |
我有两个用户定义的 ID 需要与 id1 或 id2 列匹配。
注意 id1 id2,将找不到匹配项。那是我的问题。我无法检查是否找到了 id1 和 id2 的组合,无论是 id1 > id2 还是 id1
如何使用占位符来做到这一点?
PHP 代码:
public function getMatch($id, $id2)
{
$sql = "SELECT * FROM table WHERE id1 = ? AND id2 = ?";
$stmt = $this->connect()->prepare($sql);
$stmt->execute([$id, $id2]);
$outputs = $stmt->fetchAll();
foreach ($outputs as $output) {
echo $output["name1"];
echo $output["name2"];
}
}
处理用户定义的 ID:
$Match = new getMatch();
$Match->getMatch($input1, $input2);
如果 input1=id1=56 和 input2=id2=55,将找不到匹配项,即使 id1=55 和 id2=56 存在。
现在我只是在避免这个“解决方案”的问题:
$Match->getMatch($input1, $input2);
$Match->getMatch($input2, $input1);
其中一个将始终有效,而另一个返回 null。但我需要做得更优雅。
【问题讨论】:
-
您可以更新查询以包含第二次调用 getMatch 的逻辑。因此
WHERE case1 OR case2; -
嗨,雷米,感谢您的建议。我已经这样做了,并且它有效,但我也对该解决方案不满意:$a = $id1; $b = $id2;如果($a > $b) { $a = $id2; $b = $id1; }