【发布时间】:2020-12-11 14:35:07
【问题描述】:
我有 2 个文件 login.php 和 employee.php。
当我登录网站时,我会创建一个到我的数据库的连接。如何保持这种连接,以便我可以在employee.php 文件中调用一些查询语句?
这是login.php:
<?php
if (isset($_POST["login"])) {
$server_name = "my-server.database.windows.net";
$user_name = $_POST['user_email'];
$password = $_POST['user_password'];
$connection = array("Database"=>"BankingDB", "UID"=>$user_name, "PWD"=>$password);
$conn = sqlsrv_connect($server_name, $connection);
if ($conn) {
session_start();
$_SESSION['user_name'] = $user_name;
$_SESSION['password'] = $password;
setcookie("type", $user_name, time() + 3600);
header("location:index.php?page=employee");
}
else {
echo "<div class='alert alert-danger'>Wrong Email Address or Password!</div>";
die(print_r(sqlsrv_errors(), true));
}
}
?>
这是employee.php:
<?php
session_start();
$server_name = "my-server.database.windows.net";
$connection = array("Database"=>"BankingDB", "UID"=>$_SESSION['user_name'], "PWD"=>$_SESSION['password']);
$conn = sqlsrv_connect($server_name, $connection);
if ($conn) {
echo "Connection established: " . $server_name;
}
else {
echo "Connection could not be established";
die(print_r(sqlsrv_errors(), true));
}
$id = $_GET['employee_id'];
$sql = "SELECT EmployeeName, EmployeeCode FROM Employee WHERE EmployeeCode = $id;";
$query = sqlsrv_query($conn, $sql);
$row = sqlsrv_fetch_array($query);
?>
我可以用$_SESSION 变量保存user_name 和password。我也有许多文件也使用此连接。
我确实尝试将$conn 存储在$_SESSION 中,但它不起作用。
<?php
// login.php
$conn = sqlsrv_connect($server_name, $connection);
$_SESSION['connection'] = $conn;
?>
我怎样才能保持这种连接,这样我就不必每次需要查询时都重新连接到数据库?
【问题讨论】:
-
自从我使用 PHP 以来已经 long 时间(可能是十年),但是,我记得“规范”是将连接详细信息存储在单独的文件中和
include在需要它的页面中。您真的不应该在每个页面中重新声明连接详细信息;如果这些连接细节发生变化,那将是一场噩梦。 -
您可以使用类中的公共静态属性来存储您的连接。所以你也许可以从每个文件中访问它。
-
警告:您对SQL Injections 持开放态度,应该使用参数化的prepared statements,而不是手动构建查询。它们由PDO 提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行,you are still in risk of corrupting your data。 Escaping is not enough!
-
你不能那样做。您必须在每个请求上打开一个新连接。
标签: php sql-server