php mssql linux

时间:2015-10-12 09:51:13

标签: php sql-server linux

我有一个带有mssql连接的php文件,适用于Windows。

现在我想在linux上运行我的php。

我安装了unixodbc和msodbcsql。

服务器正在运行RedhatEnterprise 6和php 5.4

我找不到任何关于如何使用linux连接到mssql数据库的描述。

我还需要安装和配置什么?

3 个答案:

答案 0 :(得分:1)

您当然可以使用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资源包括:

Connecting to mssql using pdo through php and linux

pdo dblib on centos 6.x

答案 1 :(得分:0)

我最近遇到了同样的挑战,经过最后的努力,我决定采取一些不同的方式,如下所示。

我设置了一台运行PHP和Apache的Windows机器(它可能是一台虚拟机)来处理来自Linux机箱的MSSQL请求。

Linux上的PHP使用CURL命令向Windows发送请求,响应包含数据(压缩)。

或许有点不合适,但运作良好。

答案 2 :(得分:0)

您需要激活模块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服务器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);