PHP 在单个文件中连接到 MySQL 和 MSSQL

标签 php mysql sql-server database mysqli

<分区>

我正在我的 XAMPP (5.6.8) 本地主机上开发一个小型 Web 应用程序,它从两个远程数据库中选择数据,一个是 MySQL,一个是 MSSQL

我不确定如何在单个 conn.php 文件中连接到这两个数据库 - 如果可能的话?

我能够使用 HeadiSQL 和 SQL Server Management Studio 登录每个数据库,运行查询和检索数据,所以我知道这不是用户权限问题。注意:我不是这两个数据库的管理员。

我有一个 conn.php 文件,我将其包含在整个 Web 应用程序中。该文件的内容如下。

当我包含 MSSQL 连接线时,我在我的 Web 应用程序上收到以下错误消息;

localhost is currently unable to handle this request. HTTP ERROR 500

当我删除 MSSQL 连接线时,我的 Web 应用程序会正常加载。 我是否应该以不同的方式连接到 MSSQL 数据库,这显然是问题所在。

conn.php

<?php
// Create MySQL connection
$conn = new mysqli('123.123.123.123', 'db_user', 'password', 'db_name'); 
if ($conn->connect_errno > 0) {
    die('Unable to connect to database [' . $conn->connect_error . ']');
} 
// end MySQL connection

//Create MSSQL connection
$serverName = "456.456.456.456";
$connectionInfo = array( "Database"=>"db_name", "UID"=>"db_user", "PWD"=>"password");
$conn2 = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn2 ) {
     echo "Connection established to smartcard.<br />";
}else{
     echo "Connection could not be established.<br />";
     die( print_r( sqlsrv_errors(), true));
}
// end MSSQL connection
?>

我还创建了一个单独的conn_1.php 页面,其中 MSSQL 连接代码。当我在浏览器中访问此页面时,我看到以下错误;

localhost is currently unable to handle this request. HTTP ERROR 500

感谢任何帮助。

最佳答案

mysqlisqlsrv 是完全不同的扩展。他们不共享代码库、目标 DBMS 甚至接口(interface)——他们也不说变量或资源。您应该尝试两个基本的故障排除步骤:

  1. 从另一个客户端(例如 SQL Server Management Studio)连接到 SQL Server 以确定您的凭据和服务器设置是否正确。

  2. 独立运行您的 SQLSRV 代码,可能来自一个简短的测试脚本,以消除代码其他部分的副作用。


我最初误读您的问题时写了一些建议。我会保留它的改编版本,因为我认为它无论如何都有用。

处理两个具有不同设计的不同数据库 API 可能很困难。通常更容易切换到像 PDO 这样的跨 DBMS 库。 (sqlsrv 扩展提供了一个 PDO 驱动程序。)

如果那不是一个选项,您可以编写自定义包装器。您可以定义具有所需功能的接口(interface),例如:

interface MyDatabaseConnection {
    public function connect();
    public function prepare(array $params);
}
interface MyDatabaseStatement{
    public function execute($sql);
    public function fetchRow();
}

...并为两个 DBMS 编写实现它的类。

关于PHP 在单个文件中连接到 MySQL 和 MSSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39765986/

相关文章:

基于文本输入和下拉选项的 PHP 查询 - 忽略空格?

php - 在php中提交表单时如何保留下拉列表的值?

MySql 将长unix转换为时间戳(以毫秒为单位)

mysql - MySql 设计器中的关系问题

sql - 如何在 OUTER APPLY 查询中将 varchar 转换为 XML

php - Cakephp 3.0 表单验证

php - MySQL 查询没有结果

mysql - apt-get update 更新mysql失败

SQL Sum 当天的多个值

sql - T-SQL : SELECT posts where trend is downwards on two time periods