Mysql joomla数据库选择和插入查询
我正在尝试在用户注册后向joomla(2.5.7)数据库插入另一个信息。用户选择他的用户组,我希望只有当用户在一个特定的组中时,插入才会发生。因此,我尝试使用这段代码从数据库中获取组数据,以便在insert查询中首先使用。现在它只是一个试验场,稍后将在if语句中使用检索到的值 代码如下:Mysql joomla数据库选择和插入查询,mysql,joomla,Mysql,Joomla,我正在尝试在用户注册后向joomla(2.5.7)数据库插入另一个信息。用户选择他的用户组,我希望只有当用户在一个特定的组中时,插入才会发生。因此,我尝试使用这段代码从数据库中获取组数据,以便在insert查询中首先使用。现在它只是一个试验场,稍后将在if语句中使用检索到的值 代码如下: function onUserAfterSave($user, $isnew, $success, $msg) { if ($isnew && $success) { $db
function onUserAfterSave($user, $isnew, $success, $msg)
{
if ($isnew && $success) {
$db = &JFactory::getDBO();
$query = "SELECT #__k2_users.group FROM #__k2_users WHERE userID = ".$user['id'];
$db->setQuery($query);
$group = $db->loadResult();
$db->setQuery( 'INSERT INTO #__user_profiles (ordering) VALUES ('.$group.')' );
$db->query();
if (!$db->query())
{
throw new Exception($db->getErrorMsg());
}
}
return $this->onAfterStoreUser($user, $isnew, $success, $msg);
}
这就是我在注册失败时遇到的错误:
Column count doesn't match value count at row 1 SQL=INSERT INTO std13_user_profiles (ordering) VALUES ()
如果我读对了,这意味着select语句没有返回任何内容,但为什么?谢谢你的帮助
更新:
if ($isnew && $success) {
$db = &JFactory::getDBO();
$userId = JArrayHelper::getValue($user, 'id', 0, 'int');
$query = "SELECT #__k2_users.group FROM #__k2_users WHERE userID = ".$userId;
$db->setQuery($query);
$group = $db->loadResult();
$query2 = "INSERT INTO #__user_profiles (ordering) VALUES ('".$group."')";
$db->setQuery($query2);
$db->query();
if (!$db->query())
{
throw new Exception($db->getErrorMsg());
}
}
使用这段代码,我不会得到任何错误,用户被注册,值被插入。然而,$group总是0,根据k2_users表中的值只有1或3,我猜它不会返回任何结果。我想这可能是因为注册用户还没有存储在数据库中,并且还没有他的ID来查找组
更新2:
if ($isnew && $success) {
$count = JRequest::getVar('gender');
if($count == 3) {
$db = &JFactory::getDBO();
$alias = $user['name'];
$table = array(
' '=>'-', 'Š'=>'S', 'š'=>'s', 'Ð'=>'Dj', 'Ž'=>'Z', 'ž'=>'z', 'C'=>'C', 'c'=>'c', 'C'=>'C', 'c'=>'c',
'À'=>'A', 'Á'=>'A', 'Â'=>'A', 'Ã'=>'A', 'Ä'=>'A', 'Å'=>'A', 'Æ'=>'A', 'Ç'=>'C', 'È'=>'E', 'É'=>'E',
'Ê'=>'E', 'Ë'=>'E', 'Ì'=>'I', 'Í'=>'I', 'Î'=>'I', 'Ï'=>'I', 'Ñ'=>'N', 'Ò'=>'O', 'Ó'=>'O', 'Ô'=>'O',
'Õ'=>'O', 'Ö'=>'O', 'ě'=>'e', 'Ù'=>'U', 'Ú'=>'U', 'Û'=>'U', 'Ü'=>'U', 'Ý'=>'Y', 'Þ'=>'B', 'ß'=>'Ss',
'à'=>'a', 'á'=>'a', 'â'=>'a', 'ã'=>'a', 'ä'=>'a', 'å'=>'a', 'æ'=>'a', 'ç'=>'c', 'è'=>'e', 'é'=>'e',
'ê'=>'e', 'ë'=>'e', 'ì'=>'i', 'í'=>'i', 'î'=>'i', 'ï'=>'i', 'ð'=>'o', 'ñ'=>'n', 'ò'=>'o', 'ó'=>'o',
'ô'=>'o', 'õ'=>'o', 'ö'=>'o', 'ø'=>'o', 'ù'=>'u', 'ú'=>'u', 'û'=>'u', 'ý'=>'y', 'ý'=>'y', 'þ'=>'b',
'ÿ'=>'y', 'R'=>'R', 'r'=>'r', " "=>'-', '"'=>'-'
);
$string = strtr($alias, $table);
$alias_low = strtolower($string);
$query = "INSERT INTO #__menu (menutype, title, alias, path, link, type, published, level, component_id, access) VALUES ('stavebnici','".$user['name']."','".$alias_low."','".$alias_low."',
'index.php?option=com_k2&view=itemlist&layout=user&id=".$user['id']."&task=user','component',1,1,10012,1)";
$db->setQuery($query);
$db->query();
if (!$db->query())
{
throw new Exception($db->getErrorMsg());
}
}
}
好的!我让它工作,所以现在我可以插入新的菜单每次用户创建,但激活链接没有创建,注册说,它失败了。这就是错误:
Duplicate entry '0-1-vojtech-plesner-' for key 'idx_client_id_parent_id_alias_language' SQL=INSERT INTO std13_menu (menutype, title, alias, path, link, type, published, level, component_id, access) VALUES ('stavebnici','Vojtěch Plešner','vojtech-plesner','vojtech-plesner', 'index.php?option=com_k2&view=itemlist&layout=user&id=2789&task=user','component',1,1,10012,1)
客户端id、父级id和语言的值为1、1和*abd,它们都在所有行中,为什么它会说它是重复的?您可以通过一个查询来完成:
$query = "
INSERT INTO #__user_profiles (ordering)
SELECT #__k2_users.group
FROM #__k2_users
WHERE userID = " . user['id']
";
$query = "
INSERT INTO #__user_profiles (ordering)
SELECT "YOURJOOMLADBPREFIX"_k2_users.group
FROM "YOURJOOMLADBPREFIX"_k2_users
WHERE userID = " . user['id']
";
但是,
#u_u用户配置文件
是否有其他类似用户id的列?您需要将该查询更新为2.5样式
这是一篇好文章
你肯定失踪了
$query=$db->getQuery(true)
更不用说您正在使用&作为对象。这种用法会产生严格的错误。您也可以通过一个查询来完成:
$query = "
INSERT INTO #__user_profiles (ordering)
SELECT #__k2_users.group
FROM #__k2_users
WHERE userID = " . user['id']
";
$query = "
INSERT INTO #__user_profiles (ordering)
SELECT "YOURJOOMLADBPREFIX"_k2_users.group
FROM "YOURJOOMLADBPREFIX"_k2_users
WHERE userID = " . user['id']
";
$group
的值是多少。我希望$group返回select查询的结果。它应该是数字1或3。请尝试从此函数开始调试代码。@Tornado我已用更多代码编辑了我的问题谢谢您的回答,这是可行的,但正如我所写的,我将在if条件下使用select语句中的值,如果if未通过,则执行插入或wont。我正在使用user_profiles表来测试代码。谢谢!你说得对!它是在数据库中定义和执行查询的!现在它工作完美!