代码之家  ›  专栏  ›  技术社区  ›  brechtvhb

依靠Zend_Db_Select

  •  4
  • brechtvhb  · 技术社区  · 14 年前

    假设我有一个随机的zend_db_select对象。

    我尝试了以下方法:

    $data->TotalRecords = $select->columns(new Zend_Db_Expr('COUNT(*)'))->query()->fetch();
    

    但这给了我以下错误:

    消息:没有为FROM子句指定表

    查询本身工作正常并返回结果集。

    5 回复  |  直到 12 年前
        1
  •  10
  •   David Snabel-Caunt    14 年前

    有两种方法可以指定在Zend_Db_Select中获取的列。下面两个生成相同的SQL

    $select = $db->select()
                 ->from('myTable', array())
                 ->columns(array('TotalRecords' => new Zend_Db_Expr('COUNT(*)')));
    
    $select = $db->select()
                 ->from('myTable', array('TotalRecords' => new Zend_Db_Expr('COUNT(*)')));
    

    很容易将Zend_Db_Select转换为SQL字符串,以便调试或与其他函数一起使用。

    echo $select; // prints SELECT COUNT(*) AS `TotalRecords` FROM `myTable`
    

    这将使用toString方法,该方法由Zend_Db fetch方法自动调用:

    $total = $db->fetchOne($select); 
    
    echo $total; //prints the number of rows matching the query
    

        2
  •  1
  •   rahim asgari    14 年前

    使用 $select->__toString() 方法输出生成的查询并查看它有何问题。

    如果查询中没有from子句,请添加 From()

        3
  •  1
  •   Maxence    14 年前

    如果使用Zend_Db_Select,则必须调用from方法来设置表名。有一个Zend_Db_ _Select,表在构造函数中传递,因此不需要从调用。

        4
  •  0
  •   Subdigger    13 年前
    $select = $db->select();
    
    $select->from(
        'table_name',
        array('cnt' => 'count(1)')
    );
    
        5
  •  0
  •   EaterOfCode    11 年前

    这个 Zend_Db_Select::columns 函数需要一个数组而不是一个对象或字符串(当第一个参数是一个字符串或对象时,它可能会将它用作您给出的列的主表,但对此我不确定)。

    将代码更改为

    $data->TotalRecords = $select->columns(array(new Zend_Db_Expr('COUNT(*)')))->query()->fetch();
    

    推荐文章