如何保持SQLServer和PHP之间的连接?
我有两个文件如何保持SQLServer和PHP之间的连接?,php,sql-server,Php,Sql Server,我有两个文件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'];
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));
}
}
?>
<?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);
?>
我可以使用$\u SESSION
变量保存用户名
和密码
。我还有很多文件也使用了这个连接
我确实尝试将$conn
存储在$\u会话中,但它不起作用
<?php
// login.php
$conn = sqlsrv_connect($server_name, $connection);
$_SESSION['connection'] = $conn;
?>
如何保持连接,使我不必每次需要查询时都重新连接到数据库?在配置文件中,您可以定义一些常量
<?php
define('DBHOST', 'your-dbhost');
define('DBNAME', 'your-dbname');
define('DBUSER', 'your-dbuser');
define('DBPASS', 'your-dbpass');
?>
如果你喜欢使用PDO。。。
创建一个DB类,该类使用singleton模式创建连接并将其存储在变量中
<?php
class DB extends PDO {
/**
* Singleton instance of this class.
* @var PDO
*/
private static $instance;
/**
* @return PDO
*/
public static function getInstance(): PDO {
if (self::$instance !== null) {
return self::$instance;
}
$dsn = 'mysql:host='.DBHOST.';dbname='.DBNAME.';charset=utf8';
$opt = [
self::ATTR_ERRMODE => self::ERRMODE_EXCEPTION,
self::ATTR_DEFAULT_FETCH_MODE => self::FETCH_ASSOC,
self::ATTR_EMULATE_PREPARES => false,
];
self::$instance = new self($dsn, DBUSER, DBPASS, $opt);
return self::$instance;
}
}
?>
现在,您可以在每个文件中使用连接
<?php
$db = DB::getInstance();
$db->select(...);
?>
在配置文件中,您可以定义一些常量
<?php
define('DBHOST', 'your-dbhost');
define('DBNAME', 'your-dbname');
define('DBUSER', 'your-dbuser');
define('DBPASS', 'your-dbpass');
?>
如果你喜欢使用PDO。。。
创建一个DB类,该类使用singleton模式创建连接并将其存储在变量中
<?php
class DB extends PDO {
/**
* Singleton instance of this class.
* @var PDO
*/
private static $instance;
/**
* @return PDO
*/
public static function getInstance(): PDO {
if (self::$instance !== null) {
return self::$instance;
}
$dsn = 'mysql:host='.DBHOST.';dbname='.DBNAME.';charset=utf8';
$opt = [
self::ATTR_ERRMODE => self::ERRMODE_EXCEPTION,
self::ATTR_DEFAULT_FETCH_MODE => self::FETCH_ASSOC,
self::ATTR_EMULATE_PREPARES => false,
];
self::$instance = new self($dsn, DBUSER, DBPASS, $opt);
return self::$instance;
}
}
?>
现在,您可以在每个文件中使用连接
<?php
$db = DB::getInstance();
$db->select(...);
?>
我使用PHP已经有很长一段时间了(可能是十年),但是,我记得“标准”是将连接详细信息存储在单独的文件中,并将其包含在需要的页面中。你真的不应该在每个页面中重新说明连接细节;如果这些连接细节发生变化,那将是一场噩梦。您可以使用类中的公共静态属性来存储连接。因此,您可以从每个文件访问它。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。你不能那样做。你必须在每次请求时打开一个新的连接。自从我使用PHP以来已经有很长一段时间了(可能是十年),然而,我记得“标准”是将连接细节存储在一个单独的文件中,并将其包含在需要的页面中。你真的不应该在每个页面中重新说明连接细节;如果这些连接细节发生变化,那将是一场噩梦。您可以使用类中的公共静态属性来存储连接。因此,您可以从每个文件访问它。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。你不能那样做。您必须在每次请求时打开一个新连接。谢谢,我将用我的代码尝试。谢谢,我将用我的代码尝试。