我正在尝试创建一个全局变量,其中包含来自我的数据库的用户特定数据。我一直在寻找互联网,但我无法找到正确的答案。我不太清楚如何处理这个问题。
在此代码点,用户已注册并登录,其登录数据保存在$ 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天的脚本,因此对我的代码的任何建议都非常感激。
谢谢,
答案 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。