gpt4 book ai didi

php - 重用带有可选条件的准备好的语句

转载 作者:行者123 更新时间:2023-11-30 22:07:27 25 4
gpt4 key购买 nike

我在 WHERE 子句中使用了一个具有各种条件的非常复杂的准备好的语句,并且在某一时刻我实际上需要具有一个更具体条件的相同语句。创建两个不同的语句是一种糟糕的方法,因为它们共享它们的大部分查询字符串,并且当我更新一个时,我也必须更新另一个。到目前为止,我尝试使用这个:

SELECT columns
FROM tables
WHERE manyConditions AND (specificColumn = ? OR ? = NULL)

在这种情况下,我可以绑定(bind)一个任意参数和 NULL 以使特定条件对不需要它的查询无用 ($pdo->execute([/* ... */, -1, null])) 同时在绑定(bind)适当的值和非 NULL 的值时仍然能够按 specificColumn 进行过滤 ($pdo->execute([/* ... */, '特定值', true])).

这是一种非常肮脏的防止代码重复的方法,在大多数情况下它迫使我再绑定(bind)两个变量。

是否有更优雅的方法来防止代码重复?

最佳答案

这是一位深思熟虑的程序员提出的一个非常好的问题。

我想说没有同样优雅和简单的解决方案。但我可以提供几种方法,您可以决定哪一种最适合您。

  1. 您可以使用命名占位符并保持模拟模式打开。在这种情况下,您只需绑定(bind)每个变量一次。但是,整体书写将保持与命名占位符相同,您必须将每个名称重复三遍。
  2. 正如现在已删除的答案中所建议的那样,您可以使用条件查询构建,例如

    $sql = "SELECT columns FROM tables WHERE manyConditions";
    $params = [$a,$b,$c];
    if (!empty($d)) {
    $sql .= " AND specificColumn = ?";
    $params[] = $d;
    }
    $stmt = $pdo->prepare($sql);
    $stmt->execute($params)

关于php - 重用带有可选条件的准备好的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41162945/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com