为什么这些都是简单的更新&;插入sql函数不能与我的php查询一起正常工作?

为什么这些都是简单的更新&;插入sql函数不能与我的php查询一起正常工作?,php,mysql,joomla,Php,Mysql,Joomla,我正在开发一个定制的joomla组件,它只需向数据库中添加一个带有两个字段(id,points)的points表。。。id是主键,我正在尝试将其设置为与用户joomla用户id相同 我需要一个函数为用户返回点数,另一个函数将用户点数更新为给定值。。。我成功创建了第一个名为: getUserPoints() 它返回给定用户的点数。。。然后我启动了第二个更新函数,名为: updateUserPoints() 这是目前“不一致”的部分,我想我错了。。。我只是想做一个简单的功能,将更新当前用户的积分

我正在开发一个定制的joomla组件,它只需向数据库中添加一个带有两个字段(id,points)的points表。。。id是主键,我正在尝试将其设置为与用户joomla用户id相同

我需要一个函数为用户返回点数,另一个函数将用户点数更新为给定值。。。我成功创建了第一个名为:

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();