【问题标题】:Class function not printing out data in php with mysqli prepared statement类函数不使用 mysqli 准备语句在 php 中打印数据
【发布时间】:2016-05-30 11:36:33
【问题描述】:

我需要一些关于不回显 $bonusjson 数组的函数的帮助。函数是CheckBonus()。除此功能外,所有其他功能都可以正常工作。当它运行时,它没有任何回应,我不知道为什么。这真的是我第一次使用类和函数。 CheckBonus() 假设查询数据库并检查表以查看 $hash 变量数据是否存在,然后运行查询并打印出数据。 p>

我认为问题在于 if($stmt->num_rows != 0)。我也尝试过使用 if(!empty($stmt->store_result())) 来打印数据,但是如果我将 $hash 更改为不在数据库中,它不运行 AddUser()

<?

//Mysql connect info
$servername = "removed";
$username = "removed";
$password = "removed";
$database = "removed";

$link = new mysqli($servername, $username, $password, $database);
if ($link->connect_error)
{
    die("Connection failed: " . $link->connect_error);
}

//Get or send the information from/to the game
$func = $_GET['func'];
$hash = $link->real_escape_string($_GET['user']);
$bonus = $link->real_escape_string($_GET['bonus']);

class CheckUser
{
    function CheckBonus($hash)
    {
        global $link;
        global $hash;
        $query = "SELECT bonustier, resettime, userid FROM members WHERE userid = ?";
        if ($stmt = $link->prepare($query))
        {
            $stmt->bind_param('s', $hash);
            $stmt->execute();

            if($stmt->num_rows != 0) {
                $stmt->store_result();
                $stmt->bind_result($bonustier, $resettime, $hash);

                while($stmt->fetch())
                {
                    //Check if enough time has passed since last login bonus
                    $time = time();
                    $time2 = ((($time - $resettime) / 60) / 60);
                    $time3 = substr($time2, 0, strpos($time2, "."));

                    if($time3 >= 24)
                    {
                        $connection = 1;
                        $usergood = 1;
                        $loginbonus = 1;
                        $hoursince = $time3;

                        $bonusarray = array(
                            'BonusCheck' => array(
                                'connection' => $connection,
                                'usergood' => $usergood,
                                'loginbonus' => $loginbonus,
                                'bonustier' => $bonustier,
                                'hoursince' => $time3
                                ),
                            );

                        $bonusjson = json_encode($bonusarray, 128);
                        echo $bonusjson;
                    }
                    else //If enough time has not passed, tell the game.
                    {
                        $connection = 1;
                        $usergood = 1;
                        $loginbonus = 0;
                        $hoursince = $time3;

                        $bonusarray = array(
                            'BonusCheck' => array(
                                'connection' => $connection,
                                'usergood' => $usergood,
                                'loginbonus' => $loginbonus,
                                'bonustier' => $bonustier,
                                'hoursince' => $time3
                                ),
                            );

                        $bonusjson = json_encode($bonusarray, 128);
                        echo $bonusjson;
                    }
                }
            }
            else
            {
                $this->AddUser($hash);
            }

        }
        $stmt->close();
    }

    function UpdateBonus($hash, $bonus)
    {
        global $link;
        global $hash;
        global $bonus;
        if($stmt = $link->prepare("UPDATE members SET loginbonus = ?, bonustier = ?, resettime = ? WHERE userid=?"))
        {
            $stmt->bind_param('ssss', $loginbonus, $bonustier, $resettime, $hash);

            switch($bonus)
            {
                case 0:
                    $bonustier = 1;
                    break;
                case 1:
                    $bonustier = 2;
                    break;
                case 2:
                    $bonustier = 3;
                    break;
                case 3:
                    $bonustier = 4;
                    break;
                case 4:
                    $bonustier = 5;
                    break;
                case 5:
                    $bonustier = 0;
                    break;
            }

            $loginbonus = 0;
            $resettime = time();
            $success = '1';

            $updatearray = array(
                'UpdateBonus' => array(
                    'login' => $loginbonus,
                    'result' => $success
                    ),
                );

            $updatejson = json_encode($updatearray, 128);
            echo $updatejson;

            $stmt->execute();
            $stmt->close();
        }
    }

    function AddUser($hash)
    {
        global $link;
        global $hash;
        if($stmt = $link->prepare("INSERT INTO members (userid, loginbonus, bonustier, resettime) VALUES (?, ?, ?, ?)"))
        {
            $stmt->bind_param('ssss', $userid, $loginbonus, $bonustier, $resettime);

            $userid = $hash;
            $loginbonus = 1;
            $bonustier = 1;
            $resettime = time();

            $stmt->execute();
            $stmt->close();

            $this->CheckBonus($hash);
        }
    }

    function CheckFunc($func)
    {
        switch($func)
        {
            case cb:
                $this->CheckBonus($hash);
                break;
            case ub:
                $this->UpdateBonus($hash, $bonus);
                break;
            case au:
                $this->AddUser($hash);
                break;
            default:
                echo 'Function not found.';
                break;
        }
    }
}

$newObject = new CheckUser();
$newObject->CheckFunc($func);

?>

如果你碰巧对我的问题投了反对票,你能告诉我为什么吗?我在这里做错了什么,我可以在哪些方面做得更好,在提出问题时我可以在哪些方面做得更多?

【问题讨论】:

    标签: php function oop mysqli


    【解决方案1】:

    我相信我知道我做错了什么。它现在似乎按预期工作。我将 $stmt->store_result(); 移到 if($stmt->num_rows != 0) 行上方,并将该行更改为 if($ stmt->num_rows > 0)。不确定第二个更改是否真的有任何效果,但在语句中使用 > over != 似乎更好。

    这是处于工作状态的代码。

    //Mysql connect info
    $servername = "removed";
    $username = "removed";
    $password = "removed";
    $database = "removed";
    
    $link = new mysqli($servername, $username, $password, $database);
    if ($link->connect_error)
    {
        die("Connection failed: " . $link->connect_error);
    }
    
    //Get or send the information from/to the game
    $func = $_GET['func'];
    $hash = $link->real_escape_string($_GET['user']);
    $bonus = $link->real_escape_string($_GET['bonus']);
    
    class CheckUser
    {
        function CheckBonus($hash)
        {
            global $link;
            global $hash;
            $query = "SELECT bonustier, resettime, userid FROM members WHERE userid = ?";
    
            if ($stmt = $link->prepare($query))
            {
                $stmt->bind_param('s', $hash);
                $stmt->execute();
                $stmt->store_result();
    
                if($stmt->num_rows > 0)
                {
                    $stmt->bind_result($bonustier, $resettime, $hash);
    
                    while($stmt->fetch())
                    {
                        //Check if enough time has passed since last login bonus
                        $time = time();
                        $time2 = ((($time - $resettime) / 60) / 60);
                        $time3 = substr($time2, 0, strpos($time2, "."));
    
                        if($time3 >= 24)
                        {
                            $connection = 1;
                            $usergood = 1;
                            $loginbonus = 1;
                            $hoursince = $time3;
    
                            $bonusarray = array(
                                'BonusCheck' => array(
                                    'connection' => $connection,
                                    'usergood' => $usergood,
                                    'loginbonus' => $loginbonus,
                                    'bonustier' => $bonustier,
                                    'hoursince' => $time3
                                    ),
                                );
    
                            $bonusjson = json_encode($bonusarray, 128);
                            echo $bonusjson;
                        }
                        else //If enough time has not passed, tell the game.
                        {
                            $connection = 1;
                            $usergood = 1;
                            $loginbonus = 0;
                            $hoursince = $time3;
    
                            $bonusarray = array(
                                'BonusCheck' => array(
                                    'connection' => $connection,
                                    'usergood' => $usergood,
                                    'loginbonus' => $loginbonus,
                                    'bonustier' => $bonustier,
                                    'hoursince' => $time3
                                    ),
                                );
    
                            $bonusjson = json_encode($bonusarray, 128);
                            echo $bonusjson;
                        }
                    }
                }
                else
                {
                    $this->AddUser($hash);
                }
    
            }
            $stmt->close();
        }
    
        function UpdateBonus($hash, $bonus)
        {
            global $link;
            global $hash;
            global $bonus;
    
            if($stmt = $link->prepare("UPDATE members SET loginbonus = ?, bonustier = ?, resettime = ? WHERE userid=?"))
            {
                $stmt->bind_param('ssss', $loginbonus, $bonustier, $resettime, $hash);
    
                switch($bonus)
                {
                    case 0:
                        $bonustier = 1;
                        break;
                    case 1:
                        $bonustier = 2;
                        break;
                    case 2:
                        $bonustier = 3;
                        break;
                    case 3:
                        $bonustier = 4;
                        break;
                    case 4:
                        $bonustier = 5;
                        break;
                    case 5:
                        $bonustier = 0;
                        break;
                }
    
                $loginbonus = 0;
                $resettime = time();
                $success = '1';
    
                $updatearray = array(
                    'UpdateBonus' => array(
                        'login' => $loginbonus,
                        'result' => $success
                        ),
                    );
    
                $updatejson = json_encode($updatearray, 128);
                echo $updatejson;
    
                $stmt->execute();
                $stmt->close();
            }
        }
    
        function AddUser($hash)
        {
            global $link;
            global $hash;
    
            if($stmt = $link->prepare("INSERT INTO members (userid, loginbonus, bonustier, resettime) VALUES (?, ?, ?, ?)"))
            {
                $stmt->bind_param('ssss', $userid, $loginbonus, $bonustier, $resettime);
    
                $userid = $hash;
                $loginbonus = 1;
                $bonustier = 1;
                $resettime = time();
    
                $stmt->execute();
                $stmt->close();
    
                $this->CheckBonus($hash);
            }
        }
    
        function CheckFunc($func)
        {
            switch($func)
            {
                case cb:
                    $this->CheckBonus($hash);
                    break;
                case ub:
                    $this->UpdateBonus($hash, $bonus);
                    break;
                case au:
                    $this->AddUser($hash);
                    break;
                default:
                    echo 'Function not found.';
                    break;
            }
        }
    }
    
    $newObject = new CheckUser();
    $newObject->CheckFunc($func);
    
    ?>
    

    如果有人碰巧发现有问题或可以做得更好,请告诉我。是的,我知道我真的应该改用 PDO。我刚开始学习类和函数,所以我觉得我需要先研究这个,然后开始学习 PDO。

    【讨论】:

      猜你喜欢
      • 2015-03-01
      • 1970-01-01
      • 2013-11-23
      • 2018-04-13
      • 2013-03-24
      • 1970-01-01
      • 2018-06-06
      • 2012-12-13
      • 2016-07-22
      相关资源
      最近更新 更多