将获取的查询存储到全局数组PHP中

时间:2015-03-04 18:41:31

标签: php mysql database mysqli

我正在尝试创建一个全局变量,其中包含来自我的数据库的用户特定数据。我一直在寻找互联网,但我无法找到正确的答案。我不太清楚如何处理这个问题。

在此代码点,用户已注册并登录,其登录数据保存在$ s_email和$ s_password中,这些是会话变量。

这里有一些包含mysql类的代码(mysql.php):

class mysql {

// Create database connection
private $db;
function __construct() {
    $this->db = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME) or 
                die('Database fout.');
}

// Receive user data based on cookie, then fetch this data into an array
function getUserData($s_email, $s_password, $data){

    $sql = "SELECT 
                `id`, 
                `firstname`, 
                `lastname`, 
                `city`,
                `country`,
                `gender`,
                `bio`,
                `active`,
                `member_since`
            FROM `users` 
            WHERE email = '$s_email' 
            AND password ='$s_password'"; 

    // perform the query and store the result
    $result = $this->db->query($sql);

    // if the $result contains at least one row
    if ($result->num_rows > 0) {

      // output data of each row from $result
        $data = array();
        global $data;

        while($row = $result->fetch_assoc()) {
            $data[] = $row;
        } 
    }
}

}

这是我的profile.php,它会尝试运行该功能(echo $ data ['']不起作用,但那是我想要的那种方法采用这个系统):

    <?php
        // Receive user data and send it to mysql class
        $mysql->getUserData($s_email, $s_password, $data);
        echo $data['email'];
    ?>

最终我试图为数组变量创建一个简单的访问方法。

注意:我只用PHP和MySQL编写了2天的脚本,因此对我的代码的任何建议都非常感激。

谢谢,

2 个答案:

答案 0 :(得分:2)

不要使用全局变量。

在您的函数中(不要使用$data作为参数):

function getUserData($s_email, $s_password) {
    // code

    while($row = $result->fetch_assoc()) {
        $data[] = $row;
    }
    return $data;
}

然后使用它(不要将$data作为参数传递):

$data = $mysql->getUserData($s_email, $s_password);

现在你有行循环它们:

foreach($data as $row) {
    echo $row['email'];
}

您需要在查询中选择email

答案 1 :(得分:0)

我先告诉你如何做到这一点,然后就会解释为什么你不应该这样做。

怎么做

要让getUserData方法改变你给出的$ data变量的值作为参数,你需要通过引用传递它,如下所示:

function getUserData($s_email, $s_password, &$data) {

为什么在这种情况下你不应该这样做

保持简短。因为有更好的方法(比如AbraCadaver建议的那样)并且你真的不需要首先通过引用传递$ data。