【问题标题】:Zend Framework: How to do a DB select with multiple params?Zend Framework:如何使用多个参数进行数据库选择?
【发布时间】:2023-04-10 13:50:01
【问题描述】:

我只是想知道在 Zend 框架中执行 db select 的语法是什么,其中两个值为 true。示例:我想查找用户是否已经是组的成员:

$userId = 1;
$groupId = 2;
$db = Zend_Db_Table::getDefaultAdapter();
$select = new Zend_Db_Select($db);
$select->from('group_members')
    ->where('user_id = ?', $userId); //Right here. What do I do about group_id?
$result = $select->query();
$resultSet = $result->fetchAll();

【问题讨论】:

    标签: zend-framework zend-db zend-db-select


    【解决方案1】:

    您可以使用多个 where 子句,默认情况下这些子句将被“与”在一起:

    $select->from('group_members')
        ->where('user_id = ?', $userId)
        ->where('group_id = ?', $groupId);
    

    【讨论】:

    • 我在尝试执行第一个示例时遇到异常:SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)
    • 奇怪,我在过去使用 PDO 适配器对 MySQL 使用了这两种技术。我想我需要设置一个表来测试。可能是您的数据库类型或适配器不支持我建议的语法。
    • 您使用的是什么数据库/适配器组合?
    • 我能够让第二个工作。您的代码在第二个中没有任何问题。我意识到我的问题是我处理结果错误。
    • 我现在测试了第一个版本,发现它会导致以下 SQL:SELECT group_members.* FROM group_members WHERE (user_id = 1, 1 AND group_id = 1, 1)顺便说一句:您可以使用print $select->__toString(); 从语句中输出示例 SQL。无论如何,似乎传递和参数数组实际上不适用于 Zend_Db_Select (我一定是直接使用 PDO 混淆了),所以我已经删除了答案的无效部分。
    【解决方案2】:

    以防万一有人想将 OR 条件添加到具有多个参数的选择中

    $select = $db->select()
             ->from('products',
                    array('product_id', 'product_name', 'price'))
             ->where('price < ?', $minimumPrice)
             ->orWhere('price > ?', $maximumPrice);
    

    更多信息请查看 Zend Select 手册Docs: zend.db.select

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-14
      相关资源
      最近更新 更多