Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何保持SQLServer和PHP之间的连接?_Php_Sql Server - Fatal编程技术网

如何保持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以来已经有很长一段时间了(可能是十年),然而,我记得“标准”是将连接细节存储在一个单独的文件中,并将其包含在需要的页面中。你真的不应该在每个页面中重新说明连接细节;如果这些连接细节发生变化,那将是一场噩梦。您可以使用类中的公共静态属性来存储连接。因此,您可以从每个文件访问它。警告:您完全可以使用参数化的预处理语句,而不是手动生成查询。它们由提供。永远不要相信任何形式的输入!即使您的查询仅由受信任的用户执行。你不能那样做。您必须在每次请求时打开一个新连接。谢谢,我将用我的代码尝试。谢谢,我将用我的代码尝试。