链接MS Access和数据库服务器而不安装任何其他驱动程序

时间:2016-01-26 15:47:54

标签: php mysql sql-server ms-access odbc

在我们公司的网站上,我们有一个html表单,其中出于咨询原因通过php生成电子邮件 - 这样可以正常工作。我的上司希望我将html - 表格的信息保存到MS Access - 数据库中。

我无法提出直接从php写入MS Access的解决方案 - 因此我说服他们通过MySQLphpMyAdmin一起使用 - 连接表格通过ODBC中的Access

phpMySQL之间的联系很简单,MS AccessMySQL之间的联系也很简单:

为此,每个客户都需要ODBC-MySQL-Provider来打开数据库,IT部门不想安装该数据库。

我们还在MS SQL Server上使用Windows Server - 我也可以将php连接到SQL Server - 但在这种情况下,我们需要在链接表时安装ODBC SQL Server Provider如果我们选择SQL Server Native Clients,则为Ado。 - IT人员:

  

没有在所有客户端上安装提供程序。

我的问题是:

  

是否有任何可能的解决方案来访问MySQL/SQL Server   来自MS Access而根本没有安装ODBC-Providers

我对此有很大的压力,找不到任何可以满足用户需求和期望的东西。

提前致谢

巴里斯

修改:工作php/MySQL - 代码 - 基于mysqli

$servername = "----------.de";
$username = "-------";
$password = "--------";
$dbName = "---------";
$port = "-------";

$con= mysqli_connect($servername, $username, $password, $dbName, $port );
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }

以下连接字符串适用于使用集成的ms sqlserver - 提供程序从MS Access连接到服务器端SQLSRV32.dll。感谢GordThompson

cs = "Driver={SQL Server};"
cs = cs & "Server=ip-adress,port-number;"
cs = cs & "Database=database-name;"
con.Open cs, "username", "password"

由于有可能在没有其他提供程序的情况下连接到SQL Server,我将使用PDO/SQLServer - 组合,并根据上面的连接字符串加载数据。

2 个答案:

答案 0 :(得分:1)

首先,PHP可以绝对连接到MS Access数据库(特别是Jet / ACE SQL引擎)。在现代计算中,几乎所有通用语言(C#,Java,PHP,Perl,Python,R,VB)都可以连接到所有流行的关系数据库管理系统(RDMS) - 两个文件级别(SQLite,MS Access)和服务器级别(SQL Server,MySQL,Postgre,Oracle,DB2),每个都使用某种类型的自定义或通用库。

使用PHP的PDO,您几乎可以互换连接的后端数据库。因此,无论您连接到MySQL,都可以建模与其他数据库的连接。 PHP / MySQL的网络流行使它们似乎彼此结婚但它们不是!以下是使用DSN,Driver甚至PHP自己的API sqlsrv

的示例

MS ACCESS

# USING DSN
$database="C:\Path\To\Database\File.accdb";
try {
    $dbh = new PDO("odbc:DSN=MS Access Database;DBq=$database;");
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM tablename";    
    $STH = $dbh->query($sql);    
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}
# close the connection
$dbh = null;


# USING DRIVER (NON-DSN)
$database="C:\Path\To\Database\File.accdb";
try {
    $dbh = new PDO("odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBq=$database;");    
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM tablename";    
    $STH = $dbh->query($sql);    
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}
# close the connection
$dbh = null;

SQL SERVER

# WITH ODBC DRIVER PDO
try {
    $dbh = new PDO("odbc:Driver={SQL Server};Server=$server;database=$database",$username,$password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM dbo.tablename";    
    $STH = $dbh->query($sql);    
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}
# close the connection
$dbh = null;

# WITH SQLSRV PDO
try {
    $dbh = new PDO("sqlsrv:server=$server;database=$database",$username,$password);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $sql = "SELECT * FROM dbo.tablename";    
    $STH = $dbh->query($sql);    
    $STH->setFetchMode(PDO::FETCH_ASSOC); 
}
catch(PDOException $e) {  
    echo $e->getMessage()."\n";
    exit;
}
# close the connection
$dbh = null;

其他语言连接的额外资源:

https://github.com/ParfaitG/DATABASE_CONNECTIONS

答案 1 :(得分:1)

由于最重要的考虑是避免在客户端计算机上安装其他驱动程序并且您可以使用Microsoft SQL Server,因此您可以

  1. 让您的PHP脚本将所需信息写入SQL Server,然后

  2. 创建一个Access进程,使用随每个Windows副本一起安装的“SQL Server”ODBC驱动程序从SQL Server检索信息。