我正在尝试使用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()?
答案 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”。