【发布时间】:2016-01-09 18:09:38
【问题描述】:
我有一个带有 mssql 连接的 php 文件,可以在 windows 上运行。
现在我想在 linux 上运行我的 php。
我安装了 unixodbc 和 msodbcsql。
服务器正在运行 RedhatEnterprise 6 和 php 5.4
我找不到任何关于如何使用 linux 连接到 mssql 数据库的说明。
我还需要安装和配置什么?
【问题讨论】:
标签: php sql-server linux
我有一个带有 mssql 连接的 php 文件,可以在 windows 上运行。
现在我想在 linux 上运行我的 php。
我安装了 unixodbc 和 msodbcsql。
服务器正在运行 RedhatEnterprise 6 和 php 5.4
我找不到任何关于如何使用 linux 连接到 mssql 数据库的说明。
我还需要安装和配置什么?
【问题讨论】:
标签: php sql-server linux
您需要激活模块 sqlsrv 和 pdo_sqlsrv。
sudo apt-get install php-fpm pcp-cli php-dev php-pear
sudo pecl install sqlsrv pdo_sqlsrv
放置这两行的正确位置(在 Linux 上)在 /etc/php/<version>/mods-available/pdo.ini
在那里,添加
extension=sqlsrv.so
extension=pdo_sqlsrv.so
然后重新启动/重新加载 php-fpm 或计算机。
然后运行 ./test.php(其中端口 2017 是 SQL-server-port)
#!/usr/bin/php
<?php
$serverName = "localhost,2017";
$connectionOptions = array(
"database" => "MY_DB_NAME",
"uid" => "sa",
"pwd" => "TOP_SECRET"
);
// Establishes the connection
$conn = sqlsrv_connect($serverName, $connectionOptions);
if ($conn === false) {
die(formatErrors(sqlsrv_errors()));
}
// Select Query
$tsql = "SELECT @@Version AS SQL_VERSION";
// Executes the query
$stmt = sqlsrv_query($conn, $tsql);
// Error handling
if ($stmt === false) {
die(formatErrors(sqlsrv_errors()));
}
?>
<h1> Results : </h1>
<?php
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo $row['SQL_VERSION'] . PHP_EOL;
}
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
function formatErrors($errors)
{
// Display errors
echo "Error information: <br/>";
foreach ($errors as $error) {
echo "SQLSTATE: ". $error['SQLSTATE'] . "<br/>";
echo "Code: ". $error['code'] . "<br/>";
echo "Message: ". $error['message'] . "<br/>";
}
}
?>
并使用 SQL-server pdo 查询数据库:
$servername = "";
$username = "";
$password = "";
$database = "";
$port = "1433";
try
{
$dbh = new PDO("sqlsrv:server=$servername,$port;Database=$database;ConnectionPooling=0", $username, $password,
array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
}
catch (PDOException $e)
{
echo ("Error connecting to SQL Server: " . $e->getMessage());
}
$stmt = $dbh->prepare("SELECT name FROM master.sys.databases WHERE name = db_name()");
$stmt->execute();
while ($row = $stmt->fetch()) {
print_r($row);
}
unset($dbh); unset($stmt);
【讨论】:
sqlsrv_ 的供应商特定功能,因此您也不需要安装 pdo_sqlsrv。
您当然可以使用 PHP 的 PDO 系统和 dblib 驱动程序从 Linux 服务器直接连接到 Microsoft SQL Server 数据库。
首先,安装 EPEL 存储库,然后安装 php-mssql 包。然后使用以下代码设置您的连接:
$dbhost = "your.db.server";
$dbname = "yourdbname";
$dbuser = "yourdbuser";
$dbpass = "yourdbpassword";
$db = new PDO("dblib:$dbhost;dbname=$dbname", $dbuser, $dbpass);
foreach ($db->query("select * from mytable") as $row) {
echo "{$row['field1]'}<br/>";
}
有关此主题的其他 StackOverflow 资源包括:
【讨论】:
我最近遇到了同样的挑战,经过一番摸索,最终我决定做一些不同的事情,如下所示。
我设置了一台运行 PHP 和 Apache 的 Windows 机器(可以是虚拟机)来处理来自 Linux 机器的 MSSQL 请求。
Linux 上的 PHP 使用 CURL 命令向 Windows 发送请求,响应包含数据(压缩)。
也许有点不合时宜,但运作良好。
【讨论】: