为什么这些都是简单的更新&;插入sql函数不能与我的php查询一起正常工作?
我正在开发一个定制的joomla组件,它只需向数据库中添加一个带有两个字段(id,points)的points表。。。id是主键,我正在尝试将其设置为与用户joomla用户id相同 我需要一个函数为用户返回点数,另一个函数将用户点数更新为给定值。。。我成功创建了第一个名为:为什么这些都是简单的更新&;插入sql函数不能与我的php查询一起正常工作?,php,mysql,joomla,Php,Mysql,Joomla,我正在开发一个定制的joomla组件,它只需向数据库中添加一个带有两个字段(id,points)的points表。。。id是主键,我正在尝试将其设置为与用户joomla用户id相同 我需要一个函数为用户返回点数,另一个函数将用户点数更新为给定值。。。我成功创建了第一个名为: getUserPoints() 它返回给定用户的点数。。。然后我启动了第二个更新函数,名为: updateUserPoints() 这是目前“不一致”的部分,我想我错了。。。我只是想做一个简单的功能,将更新当前用户的积分
getUserPoints()
它返回给定用户的点数。。。然后我启动了第二个更新函数,名为:
updateUserPoints()
这是目前“不一致”的部分,我想我错了。。。我只是想做一个简单的功能,将更新当前用户的积分值。。。而且我还试图处理如果没有他们的记录。。。然后创建一个!。。。。为此,我在updateUserPoints()函数中创建了一个函数,名为:
newUserCheck()
它应该检查用户是否有分数,然后回答true或false:
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();
if($points){
return false;
} else {
return true;
}
然后更新创建新记录或更新现有记录。。。这个代码几乎可以工作了!。。。它在三次测试中对我有效。。。然而,当我添加第二个用户时,它似乎变得有点不一致。。。它将成功创建一个新用户,并给他们5分。。。。然后,当我再次运行它进行更新时,它会显示“Points Updated”,但它似乎没有实际更新数据库中的Points值
有一个或没有现有的用户,它似乎工作得很好!无论如何接受建议。。。我确信我在这里犯了很多错误,但我想让它正常工作!我是MVC编程新手,你可能会说:P
以下是整个joomla控制器:
<?php defined('_JEXEC') or die('');
// userprofilepoints CONTROLLER
jimport('joomla.application.component.controller');
jimport('joomla.user.helper');
class userprofilepointsController extends JController {
function getUserPoints(){
$values = JRequest::get("post");
$userIdNumber = $values['userIdNumber'];
$user = & JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();
echo $points;
}
function updateUserPoints(){
function newUserCheck(){
$values = JRequest::get("post");
$userIdNumber = $values['userIdNumber'];
$user = & JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();
if($points){
return false;
} else {
return true;
}
}
if(newUserCheck() == false){
$values = JRequest::get("post");
$userIdNumber = $values['userIdNumber'];
$newPointsAmount = $values['newPointsAmount'];
$user = & JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery("UPDATE #__mytable SET points = '".$newPointsAmount."' WHERE id = '".$user->id."'");
$db->query();
//echo getUserPoints();
//$points = $db->loadResult();
echo "Points Updated";
} else if(newUserCheck() == true) {
$values = JRequest::get("post");
$userIdNumber = $values['userIdNumber'];
$user = & JFactory::getUser();
$db = JFactory::getDBO();
$db->setQuery("INSERT INTO #__mytable SET id = $user->id, points = 5");
$db->query();
echo "New User Created!";
}
}
}
从newUserCheck()中删除查询行
实际上应该是:
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$points = $db->loadResult();
loadResult()
将运行查询。是否loadResult()
获取结果第一行的第一列?如果没有,您可能需要在检查前手动选择points
列(如$db->loadResult()[0]->points
)我感觉loadResult()会抓取第一条结果记录是的。我还建议移动newUserCheck()
在updateuserPoints
函数之外,在所有地方调用$this->newUserCheck()
而不是newUserCheck()
,但我相信这对解决您的问题不是必需的。谢谢。。。所以我从newUserCheck()中删除了这一行,似乎得到了相同的结果。。。如果points表中有0条记录,则代码将正常工作。。。第一次点击按钮创建一个5分的用户,第二次点击将其更新为我传递给它的555444号。。。然而。。。如果积分表中已有记录。。。它似乎不起作用。。。它总是说“新用户已创建”,但数据库中没有任何内容:-/I实际上可能是错误的。。。我现在再次测试它。。。现在它似乎正在按预期工作。。。然而。。。我用数据库中的多个随机记录按时测试,结果是零星的。。。无论如何在表中添加id为0的测试行时,我能够重新创建上述问题。我不知道为什么。。。但只要没有带0的id就行了?!我想我可能在一些测试中在积分表上有主键
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$db->query();
$points = $db->loadResult();
$db->setQuery("SELECT points FROM #__mytable WHERE id = '".$user->id."'");
$points = $db->loadResult();