如何使用MS SQL服务器连接SLIM REST API?

时间:2015-07-18 07:43:06

标签: php mysql sql-server

我正在尝试使用Slim连接MSSQLSERVER2012来获取API调用的结果

用于处理MYSQL getconnection函数的示例(见下文),但是当我尝试时 连接MsSQL服务器2012我收到一个错误,如" api调用错误"无效的数据源名称"

http://localhost/msapi/api.php/clients

1' api呼叫错误"无效的数据源名称"

require '/Slim/Slim.php';

$app = new Slim();

$app->get('/clients', 'getClients');

$app->run();

function getClients() {
    $sql = "select * FROM clients";

    try {
        $db = getConnection();
        $stmt = $db->query($sql);  
        $clients = $stmt->fetchAll(PDO::FETCH_OBJ);
        $db = null;
        echo '{"client": ' . json_encode($clients) . '}';
    } catch(PDOException $e) {
        echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}


function getConnection_MYSQL() {
    $dbhost="SERVER";
    $dbuser="USER";
    $dbpass="PASSWORD";
    $dbname="DB";
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    return $dbh;
}


function getConnection() {
    $dbhost="SERVER";
    $dbuser="USER";
    $dbpass="PASSWORD";
    $dbname="DB";
    $dbh = new PDO ("ADODB.Connection");

      $connStr = "PROVIDER=SQLOLEDB;SERVER=".$dbhost.";UID=".$dbuser.";PWD=".$dbpass.";DATABASE=".$dbname;  
      $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);    
      $dbh->open($connStr); //Open the connection to the database  

    return $dbh;
}

函数getConnection_MYSQL()是一个有效的例子。 但getConnection()尝试连接MS SQL服务器?

你知道为什么我得到一个"无效的数据源名称"使用函数getConnection()?

1 个答案:

答案 0 :(得分:2)

由于您没有发布备用DSN字符串,我假设您正在使用示例中的那个,只需替换主机,用户名和密码。这不起作用。

当您在Windows主机上运行Slim-application时,您可以(并且应该)使用Microsoft's SQL Server Driver for PHP (sqlsrv)

sqlsrv.dll和pdo_sqlsrv.dll有2个版本。如果要重用大部分代码,应使用后者。这样您可能只需修改DSN(请参阅php docs):

new PDO("sqlsrv:Server=localhost;Database=testdb", "UserName", "Password");

如果您使用的是第一个,则必须更新连接到数据库的方式并创建查询。您可以阅读Beginner's Guide以查看一些可以轻松实现的示例。

如果您运行的未在Windows计算机上运行应用程序,则可能需要设置ODBC和FreeTDS,然后将PDO与ODBC-DSN一起使用。根据我的经验,这将是相当多的工作,但有一些很好的教程。只需谷歌“freetds sql server”。