我试图使用joomla 3.3.6将用户密码存储在插件中。
根据Joomla文档:https://docs.joomla.org/Inserting,_Updating_and_Removing_data_using_JDatabase
我创建了以下功能:
/**
*
* Update Password
*
* @param unknown $idUser
* @param unknown $password
*/
public function updateUserPassword($idUser, $password) {
// Create a new query object.
$query = $this->db->getQuery ( true );
$value = JUserHelper::hashPassword($password);
// Prepare the insert query.
$query->update('#__users')
->set('password = ' . $this->db->quote($value))
->where('id = ' . $idUser);
// Set the query using our newly populated query object and execute it.
$this->db->setQuery ($query);
$updateResult = $this->db->execute ();
if ($updateResult == false) {
$errorMsg = $this->db->getErrorMsg ();
var_dump($errorMsg);
} else {
echo "Update Done";
}
}
执行此代码时没有任何错误或警告,但表用户中的用户记录保持不变。
$查询值为:
UPDATE #__users
SET password = '$2y$10$hO2MfDLfG5ICy2yhZWXZG.GCQ89vYw26KHVisXuuD8baRU9WtuDR.'
WHERE id = 192
$ query看起来很好。通过将#__替换为我的自定义db前缀来在mysqlworkbench中执行查询,返回ok,我可以看到db中的更改。
然而,php代码不起作用。
有人对此有所了解吗?
开发。
修改 代码更改:在execute语句中添加错误处理。 消息"更新完成"打印出来。
答案 0 :(得分:0)
从您的代码段中,我看不出您是如何确定代码正在执行而没有任何错误。
来自Joomla文档 https://api.joomla.org/cms-3/classes/JDatabaseDriver.html#method_execute 你的execute语句应该有一个游标返回值或false。
$updateResult = $this->db->execute();
if($updateResult == false) {
$errorMsg = $this->db->getErrorMsg();
//display this in your method of choice
}
根据您的服务器,可能还有Web服务器错误日志条目。在我的LAMP开发机器上,它位于/ var / log / apache2 / error_log
中修改Joomla表记录的备用方法
$user_record = new stdClass();
$user_record->id = $idUser;
$user_record->password = $password;
$result = JFactory::getDbo()->insertObject('#__users', $user_record, $idUser);