gpt4 book ai didi

php - Zend Framework 访问数据库表对象

转载 作者:行者123 更新时间:2023-11-29 09:10:05 24 4
gpt4 key购买 nike

我在访问从 fetchRow() 返回的数组时遇到问题

Controller :

$user = $this->getUserId();
print_r($user->id); // This is where I am not getting the correct value
public function getUserId() {
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity())
$username = $auth->getIdentity()->username;

$users = new Application_Model_DbTable_Users();
$users->getUserId($username);

return $users;

}

数据库模型:

public function getUserId($username) {
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$username = $dbAdapter->quote($username);
$row = $this->fetchAll('username = ' . $username);
if($row == NULL){
throw new Exception("Result is null for $username");
}
if (!$row) {
throw new Exception("Could not find user $username");
}
return $row->toArray();
}

当我执行 print_r($user->id); 时我没有获得该用户的用户 ID。这些是我在 Controller 中打印 $user 对象时的结果。

Application_Model_DbTable_Users Object ( [_name:protected] => users [_definition:protected] => [_definitionConfigName:protected] => [_db:protected] => Zend_Db_Adapter_Pdo_Mysql Object ( [_pdoType:protected] => mysql [_numericDataTypes:protected] => Array ( [0] => 0 [1] => 1 [2] => 2 [INT] => 0 [INTEGER] => 0 [MEDIUMINT] => 0 [SMALLINT] => 0 [TINYINT] => 0 [BIGINT] => 1 [SERIAL] => 1 [DEC] => 2 [DECIMAL] => 2 [DOUBLE] => 2 [DOUBLE PRECISION] => 2 [FIXED] => 2 [FLOAT] => 2 ) [_defaultStmtClass:protected] => Zend_Db_Statement_Pdo [_config:protected] => Array ( [host] => ***** [username] => ***** [password] => ***** [dbname] => autotest [charset] => [persistent] => [options] => Array ( [caseFolding] => 0 [autoQuoteIdentifiers] => 1 [fetchMode] => 2 ) [driver_options] => Array ( ) ) [_fetchMode:protected] => 2 [_profiler:protected] => Zend_Db_Profiler Object ( [_queryProfiles:protected] => Array ( ) [_enabled:protected] => [_filterElapsedSecs:protected] => [_filterTypes:protected] => ) [_defaultProfilerClass:protected] => Zend_Db_Profiler [_connection:protected] => PDO Object ( ) [_caseFolding:protected] => 0 [_autoQuoteIdentifiers:protected] => 1 [_allowSerialization:protected] => 1 [_autoReconnectOnUnserialize:protected] => ) [_schema:protected] => [_cols:protected] => Array ( [0] => id [1] => username [2] => password [3] => salt [4] => role [5] => date_created ) [_primary:protected] => Array ( [1] => id ) [_identity:protected] => 1 [_sequence:protected] => 1 [_metadata:protected] => Array ( [id] => Array ( [SCHEMA_NAME] => [TABLE_NAME] => users [COLUMN_NAME] => id [COLUMN_POSITION] => 1 [DATA_TYPE] => int [DEFAULT] => [NULLABLE] => [LENGTH] => [SCALE] => [PRECISION] => [UNSIGNED] => [PRIMARY] => 1 [PRIMARY_POSITION] => 1 [IDENTITY] => 1 ) [username] => Array ( [SCHEMA_NAME] => [TABLE_NAME] => users [COLUMN_NAME] => username [COLUMN_POSITION] => 2 [DATA_TYPE] => varchar [DEFAULT] => [NULLABLE] => [LENGTH] => 50 [SCALE] => [PRECISION] => [UNSIGNED] => [PRIMARY] => [PRIMARY_POSITION] => [IDENTITY] => ) [password] => Array ( [SCHEMA_NAME] => [TABLE_NAME] => users [COLUMN_NAME] => password [COLUMN_POSITION] => 3 [DATA_TYPE] => varchar [DEFAULT] => [NULLABLE] => [LENGTH] => 50 [SCALE] => [PRECISION] => [UNSIGNED] => [PRIMARY] => [PRIMARY_POSITION] => [IDENTITY] => ) [salt] => Array ( [SCHEMA_NAME] => [TABLE_NAME] => users [COLUMN_NAME] => salt [COLUMN_POSITION] => 4 [DATA_TYPE] => varchar [DEFAULT] => [NULLABLE] => [LENGTH] => 50 [SCALE] => [PRECISION] => [UNSIGNED] => [PRIMARY] => [PRIMARY_POSITION] => [IDENTITY] => ) [role] => Array ( [SCHEMA_NAME] => [TABLE_NAME] => users [COLUMN_NAME] => role [COLUMN_POSITION] => 5 [DATA_TYPE] => varchar [DEFAULT] => [NULLABLE] => [LENGTH] => 50 [SCALE] => [PRECISION] => [UNSIGNED] => [PRIMARY] => [PRIMARY_POSITION] => [IDENTITY] => ) [date_created] => Array ( [SCHEMA_NAME] => [TABLE_NAME] => users [COLUMN_NAME] => date_created [COLUMN_POSITION] => 6 [DATA_TYPE] => datetime [DEFAULT] => [NULLABLE] => [LENGTH] => [SCALE] => [PRECISION] => [UNSIGNED] => [PRIMARY] => [PRIMARY_POSITION] => [IDENTITY] => ) ) [_metadataCache:protected] => [_metadataCacheInClass:protected] => 1 [_rowClass:protected] => Zend_Db_Table_Row [_rowsetClass:protected] => Zend_Db_Table_Rowset [_referenceMap:protected] => Array ( ) [_dependentTables:protected] => Array ( ) [_defaultSource:protected] => defaultNone [_defaultValues:protected] => Array ( ) )

最佳答案

首先,在 Controller 中返回模型实例而不是 getUser 执行结果。应该是这样的:

public function getUserId() {
$auth = Zend_Auth::getInstance();
if ($auth->hasIdentity())
$username = $auth->getIdentity()->username;

$users = new Application_Model_DbTable_Users();

return $users->getUserId($username);

}

然后,在您的模型中 - getUser 返回行数组而不是行(您的示例中有 fetchAll)。试试这个方法:

public function getUserId($username) {
$dbAdapter = Zend_Db_Table::getDefaultAdapter();
$username = $dbAdapter->quote($username);
$row = $this->fetchRow('username = ' . $username);
if(!$row){
throw new Exception("Result is null for $username");
}

return $row;
}

顺便说一句,您的函数称为 getUserId,但您似乎正在尝试获取用户作为结果。因此,函数名称应该改为 getUser。

关于php - Zend Framework 访问数据库表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5837288/

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