标签: zend-db

如何使用Zend_Db获取Sqlite数据库的最后一个插入ID

我正在尝试在PHP应用程序中获取Sqlite DB的最后一个插入的行ID.我正在使用Zend Framework的PDO Sqlite适配器进行数据库处理.lastInsertId()方法应该给我结果,但它不会.在php.net的PDO文档中,我读到lastInsertId()在所有数据库上的工作方式可能不同.但它根本不适用于sqlite吗?我尝试通过这个覆盖适配器的lastInsertId()方法:

// Zend_Db_Adapter_Pdo_Sqlite
public function lastInsertId() {
    $result = $this->_connection->query('SELECT last_insert_rowid()')->fetch();
    return $result[0];
}
Run Code Online (Sandbox Code Playgroud)

但它也不起作用.我每次打电话都会返回0.是否有任何特殊的清洁方式来找到最后插入的ID?

php sqlite zend-db

5
推荐指数
1
解决办法
2万
查看次数

Zend Framework Db选择加入表帮助

我有这个问题:


SELECT g.title, g.asin, g.platform_id, r.rank
        FROM games g
        INNER JOIN ranks r ON ( g.id = r.game_id )
        ORDER BY r.rank DESC
        LIMIT 5`

Run Code Online (Sandbox Code Playgroud)

现在,这是我的JOIN使用,Zend_Db_Select但它给了我数组错误


$query = $this->select();
        $query->from(array('g' => 'games'), array());
        $query->join(array('r' => 'ranks'), 'g.id = r.game_id', array('g.title', 'g.asin', 'g.platform_id', 'r.rank'));
        $query->order('r.rank DESC');
        $query->limit($top);
        $resultRows = $this->fetchAll($query);
        return $resultRows;
Run Code Online (Sandbox Code Playgroud)

谁知道我可能做错了什么?我希望显示"游戏"中的所有列以及排名表中的"排名"列.

sql select zend-framework join zend-db

5
推荐指数
2
解决办法
2万
查看次数

Zend_Db_Select按随机顺序排列,兼容mssql/mysql

好的就是这种情况,我有一个用Zend_Framework编写的应用程序,它兼容MySQL和MSSQL作为后端.现在,ZF非常擅长解决这两种语言之间的许多SQL差异/差异,但我还没有想出这个.

目标是从表中选择1个随机记录,这是一个非常简单的陈述.

这是一个select语句,例如:

$sql = $db->select()
      ->from("table")
      ->order("rand()")
      ->limit(1);
Run Code Online (Sandbox Code Playgroud)

这适用于MySQL数据库表,因为MySQL的sql如下:

SELECT `table`.* FROM `table` ORDER BY rand() ASC
Run Code Online (Sandbox Code Playgroud)

另一方面,现在MSSQL使用newid()函数进行随机化.

有没有某种帮助我可以传递给order()函数,以使它意识到它必须使用正确的顺序?我搜索了文档和zfforums,发现了一些提示,但没有什么可靠的.

我找到的其中一件事是:

ORDER BY RANDOM()无效 - ZFForums.com

他们使用以下内容:

$res = $db->fetchAll(
'SELECT * FROM table ORDER BY :random',
array('random' => new Zend_Db_Expr('RANDOM()')
);
Run Code Online (Sandbox Code Playgroud)

它工作...但我不打算通过键入它并对字符串进行替换来构建我的select语句,我试图将它保存在相同的Zend_Db_Select对象中.我也尝试过Zend_Db_Expr('RANDOM()')进入->order()声明,但它失败了.他还发布了一个理论解决方案来找到答案,但我不打算重写这个函数,修改$ db-> fetch()调用.

有任何想法吗?

php mysql sql-server zend-framework zend-db

5
推荐指数
1
解决办法
8895
查看次数

使用Zend Framework进行内部联接的最佳方法?

看起来有几种不同的方法可以使用Zend Framework连接两个表,但我以前从未这样做过,所以我不知道哪种方法最好.

这就是我要做的......

我的数据库中有3个表:

users
    ( id , name )
groups
    ( id , name )
group_members
    ( id , group_id , user_id )
Run Code Online (Sandbox Code Playgroud)

我正在尝试查找用户所属的组并将其显示给用户.这个SQL语句几乎完成了这项工作(虽然可能有更好的方法来编写它).它只返回我关注的列,它们是组的id和title.

    SELECT groups.id, groups.title
    FROM group_members
        INNER JOIN groups
        ON groups.id = group_members.group_id
    WHERE user_id = $userId
Run Code Online (Sandbox Code Playgroud)

如何使用Zend Framework完成此操作?

zend-framework inner-join zend-db-table zend-db zend-db-select

5
推荐指数
1
解决办法
7886
查看次数

Zend Framework:如何在使用DbTable Auth Adapter时检查其他列?

目前,我正在定期DbTable Auth Adapter:

protected function _getAuthAdapter($formData)
{       
    $dbAdapter = Zend_Db_Table::getDefaultAdapter();
    $authAdapter = new Zend_Auth_Adapter_DbTable($dbAdapter);
    $authAdapter->setTableName('users')
        ->setIdentityColumn('username')
        ->setCredentialColumn('password');
    $authAdapter->setIdentity($formData['username']);
    $authAdapter->setCredential(md5($formData['password']));
    return $authAdapter;
}
Run Code Online (Sandbox Code Playgroud)

但我想检查数据库中的其他列(IsActive例如).我不知道是否可以使用适配器完成此操作.如何才能做到这一点?

zend-framework zend-auth zend-db

5
推荐指数
1
解决办法
2557
查看次数

Zend_Db子查询

我一直在尝试用ZendFW构建一个sql查询,但我似乎无法让它像我想要的那样运行(或者根本不起作用).这是我正在尝试使用zend_db select()构建的查询

SELECT tc.trip_title, td.ID, td.trip_id, 
  (SELECT count(*) FROM 'trips_invites' ti 
   WHERE ti.destination_id=td.ID AND ti.accepted ='NR') AS "pending_invites" 
FROM `trips_current` AS `tc`, `trips_data` AS `td` 
WHERE (tc.ID=td.trip_id) AND (tc.creator_id = '1') 
ORDER BY `trip_id` ASC 
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚的是如何在那里正确地获得子查询,我尝试的任何东西似乎都没有用.

任何帮助将不胜感激!

谢谢!

编辑/答案:如果有人会遇到类似的问题,根据下面的建议我通过以下方式通过查询重新工作:

SELECT `tc`.`trip_title`, `td`.`ID`, `td`.`trip_id`, count(TI.ID)
FROM `trips_current` AS `tc` 
INNER JOIN `trips_data` AS `td` ON td.trip_id = tc.ID 
LEFT JOIN trips_invites AS TI ON ti.destination_id = td.id
WHERE tc.creator_id = 1  AND ti.accepted='NR'
GROUP BY td.id
ORDER BY `trip_id` ASC …
Run Code Online (Sandbox Code Playgroud)

php zend-framework subquery zend-db-table zend-db

5
推荐指数
1
解决办法
4378
查看次数

Zend的mysql_real_escape_string

我正在使用zend框架开发一个Web应用程序.对于select语句,我使用了以下方法.

例如:

public function getData($name)
{
  $sql = "SELECT * from customer where Customer_Name = '$name'";
  return $this->objDB->getAdapter()->fetchAll ($sql);
}
Run Code Online (Sandbox Code Playgroud)

这很好用.但是,如果我将客户名称发送为:colvin's place,则查询失败.我知道这是因为单引号.

之前我用过addslashes PHP函数.但我发现这不是一个很好的方法.这次我使用mysql_real_escape_stringPHP函数.

问题在于警告说.

Warning</b>: mysql_real_escape_string() [<a href='function.mysql-real-escape-string'>function.mysql-real-escape-string</a>]: Access denied for user 'ODBC'@'localhost' (using password: NO)

这是因为该mysql_real_escape_string函数需要连接到打开的数据库mysql_connect.我的问题是如何在*Zend_DB*类中使用它.我总是需要使用自定义选择查询.如果可以,请欣赏您的其他建议.

谢谢

php zend-framework mysql-real-escape-string zend-db

5
推荐指数
1
解决办法
9619
查看次数

Zend DB如何管理数据库连接

我正在使用Zend Framework进行PHP开发,这是我用来执行查询的一个小函数.这不是一个错误.代码和一切正常.但我想知道这背后的一些概念.

/** 
    * Get dataset by executing sql statement
    * 
    * @param  string $sql - SQL Statement to be executed
    * 
    * @return bool 
    */
    public function executeQuery($sql)
    {
        $this->sqlStatement = $sql;

        if ($this->isDebug)
        {
            echo $sql;
            exit;
        }

        $objSQL = $this->objDB->getAdapter()->prepare($sql);

        try
        {           
            return $objSQL->execute();

        }
        catch(Exception $error)
        {

            $this->logMessage($error->getMessage() . "  SQL : " .$sql);
            return false;
        }
        return false;
    }
Run Code Online (Sandbox Code Playgroud)

贝娄对我来说不太清楚.

  1. Zend_Db_Table_Abstract如何维护数据库连接?
  2. 当我调用此函数或是否有一些连接池时,它是否一直在创建新连接?
  3. 我没有写任何编码来打开或关闭数据库连接.那么zend框架会自动关闭连接吗?
  4. 如果执行此功能,如果此打开和关闭连接始终有效,是否存在任何性能问题?

谢谢你,感谢你对此的建议和意见.

php mysql zend-framework zend-db-table zend-db

5
推荐指数
1
解决办法
4898
查看次数

喜欢在zend框架2中的查询

我使用Zend框架2.x并面对问题,因为我已经搜索了很多.我想在查询中使用like子句,但每次都会给出错误:

这是我的努力:

$sql = new Sql($this->adapter);
$select = $sql->select()->columns(
array('user_profile_id', 'profile_login_name'))->from($this->table)->where->like(
       'profile_login_name', '%'.$strSearch.'%');
echo $select->getSqlString(); die;
Run Code Online (Sandbox Code Playgroud)

但是这给出了错误:

致命错误:在第131行的 /var/www/YAAB/branches/admin/models/Model/UserTable.php中调用未定义的方法Zend\Db\Sql\Where :: getSqlString()

我也使用了Zend\Db\Sql\Predicate但这也给出了错误.

所以我的问题是

  1. 如何在zend框架2中使用查询中的like子句?
  2. 我的代码有什么问题?

请尽快回复,因为它很紧急.

php zend-db zend-framework2

5
推荐指数
3
解决办法
2万
查看次数

将Zend\Db\ResultSet\HydratingResultSet转换为对象数组

在我的映射器类,我延长AbstractDbMapperZfcBase从数据库中提取行.一个简单的例子就是这样的代码:

class MyMapper extends AbstractDbMapper
{

    //...

    public function fetchAll() {
        $select = $this->getSelect();
        return $this->select($select); // returns HydratingResultSet
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是$this->select()返回a Zend\Db\ResultSet\HydratingResultSet(包含所需和水合物体).但我想返回这些对象的数组而不是HydratingResultSet包含对象的数组.

首先要看的是,HydratingResultSet::toArray()但这会返回一个多维数组,而不是一个对象数组.

所以我选择手工完成:

public function fetchAll() {
        $select = $this->getSelect();

        $results = array();
        foreach ($this->select($select) as $object) {
            $results[] = $object;
        }
        return $results; // returns array of needed objects
}
Run Code Online (Sandbox Code Playgroud)

这有效,但在每个获取方法中都看起来很难看.我是否必须修改select()中的代码才能获得所需的行为或者是否有更简单的方法?

顺便说一句:甚至建议返回一个数组或像这样转换它?谢谢你的帮助!

zend-framework zend-db zend-framework2

5
推荐指数
1
解决办法
3203
查看次数