php 准备好的语句绑定会话
php prepared statement bind a session
如何设置 SESSION 并将其绑定到准备好的语句中,这样我就可以从 mysqli 获得结果,其中 email 等于我的 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;
}
绑定本质上只是在查询中的 PHP 变量和占位符之间设置一个 pointer/reference。而已。由于您绑定了 $email
,对 $email
的任何更改都不会影响 $_SESSION['email']
,即使那是 $email
的来源。任务完成后,它们之间没有代码 link。
你想要这个:
$statement->bind_param('s', $_SESSION['email']);
和 bind_result
时类似。 $email
和 $_SESSION
之间没有 link,因此数据库提取调用填充到 $email
中的任何内容都不会影响会话变量。
$variable = "I am a variable";
function getVariable() {
echo $variable;
}
Q) 为什么上面的脚本会报错?
A) 范围...
无法在您的方法内部访问 $_SESSION['email']
,您需要将其全局化或定义它或将其作为参数传入。
function getById($email)
{
echo $email;
}
session_start();
getById($_SESSION['email']);
如何设置 SESSION 并将其绑定到准备好的语句中,这样我就可以从 mysqli 获得结果,其中 email 等于我的 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;
}
绑定本质上只是在查询中的 PHP 变量和占位符之间设置一个 pointer/reference。而已。由于您绑定了 $email
,对 $email
的任何更改都不会影响 $_SESSION['email']
,即使那是 $email
的来源。任务完成后,它们之间没有代码 link。
你想要这个:
$statement->bind_param('s', $_SESSION['email']);
和 bind_result
时类似。 $email
和 $_SESSION
之间没有 link,因此数据库提取调用填充到 $email
中的任何内容都不会影响会话变量。
$variable = "I am a variable";
function getVariable() {
echo $variable;
}
Q) 为什么上面的脚本会报错? A) 范围...
无法在您的方法内部访问 $_SESSION['email']
,您需要将其全局化或定义它或将其作为参数传入。
function getById($email)
{
echo $email;
}
session_start();
getById($_SESSION['email']);