php准备语句绑定一个会话

时间:2016-09-23 19:08:33

标签: php mysqli prepared-statement session-cookies

如何设置SESSION并将其绑定在准备好的语句中,这样我就可以从mysqli获得结果,其中电子邮件等于我的SESSION [' email']?

我有这个代码,我无法开始工作,因此只能通过我的会话电子邮件获得结果:

public static function getById($email) {

// Initialize session array
$email = $_SESSION['email'];

// Build database query
$sql = "select * from users where email = ?";

// Open database connection
$database = new Database();

// Get instance of statement
$statement = $database->stmt_init();

// Prepare query
if ($statement->prepare($sql)) {

// Bind parameters
$statement->bind_param('s', $email);

// Execute statement
$statement->execute();

// Bind variable to prepared statement
$statement->bind_result($id, $first_name, $last_name, $username, $email,     $created, $active);

// Populate bind variables
$statement->fetch();

// Close statement
$statement->close();
}

// Close database connection
$database->close();

// Build new object
$object = new self;
$object->id = $id;
$object->first_name = $first_name;
$object->last_name = $last_name;
$object->username = $username;
$object->email = $email;
$object->created = $created;
$object->active = $active;
return $object;
}

2 个答案:

答案 0 :(得分:1)

$variable = "I am a variable";

function getVariable() {
    echo $variable;
}

问)为什么以上脚本会出错? A)范围......

无法在您的方法中访问$_SESSION['email'],您需要全局或定义它或将其作为参数传递。

function getById($email)
{
    echo $email;
}

session_start();
getById($_SESSION['email']);

答案 1 :(得分:0)

绑定本质上只是在查询中的PHP变量和占位符之间设置指针/引用。就是这样。由于您绑定了$email,因此对$email的任何更改都不会对$_SESSION['email']产生任何影响,即使$email来自哪里。分配完成后,它们之间没有代码链接。

你想要这个:

$statement->bind_param('s', $_SESSION['email']);

和你bind_result的情况类似。 $email$_SESSION之间没有链接,因此数据库提取调用内容到$email的任何内容都不会影响会话变量。