如何检查值是否在数据库中而不在Zend中抛出异常?

时间:2015-11-08 21:58:42

标签: database exception zend-framework

我在Zend控制器中有一个注册操作,我想确保给定的用户名不在数据库中。

$tUser = $userMapper->getDbTable();
$select = $tUser->select()
                ->from(array('u'=>'users'))
                ->where('u.user_username = ' . $value);
$row = $tUser->fetchRow($select);

不幸的是,当我只想检查$ row是否为null并继续编写我的代码时,这段代码会引发Exception

  

SQLSTATE [42S22]:未找到列:1054未知列' admin'在' where子句'中,查询是:SELECT u。* FROM users AS u WHERE(u.user_username = admin)LIMIT 1

我应该删除控制器中的try / catch块还是以其他方式执行?

2 个答案:

答案 0 :(得分:0)

根据错误描述判断,我会说它总会抛出一个异常,无论用户是否存在,都会生成错误的SQL查询。尝试将$value作为第二个参数传递给where,如下所示:

$tUser = $userMapper->getDbTable();
$select = $tUser->select()
                ->from(array('u'=>'users'))
                ->where('u.user_username = ?', $value);
$row = $tUser->fetchRow($select);

然后,您将检查用户是否存在:

if(!$row) {
    // user doesn't exist
} else {
    // user exists
}

答案 1 :(得分:0)

try {
    $tUser = $userMapper->getDbTable();
    $select = $tUser->select()
                ->from(array('u'=>'users'))
                ->where('u.user_username = ?', $value);
    $row = $tUser->fetchRow($select);
} catch (Zend_Db_Exception $e) {
   echo "<pre>";print_r($e);
}