无效的数据源名称-使用php、PDO和DSN连接到MySQL

无效的数据源名称-使用php、PDO和DSN连接到MySQL,php,mysql,pdo,odbc,dsn,Php,Mysql,Pdo,Odbc,Dsn,这个剧本 <?php /* Connect to a MySQL database using driver invocation */ $dsn = 'mysqldg'; $user = 'odbc_dg'; $password = '999999999'; try { $dbh = new PDO($dsn, $user, $password); } catch (PDOException $e) { echo 'Connection failed: ' . $e-&

这个剧本

<?php
/* Connect to a MySQL database using driver invocation */
$dsn = 'mysqldg';
$user = 'odbc_dg';
$password = '999999999';

try {
    $dbh = new PDO($dsn, $user, $password);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}

?>
/etc/odbcinst.ini具有以下条目:

[mysql537]
Description = MySQL driver for Plesk
Driver      = /usr/lib/odbc2/lib/libmyodcb5w.so
Setup       = /usr/lib/odbc2/lib/libmyodbc5w.so
odbcinst.ini中的条目适用于非DSN连接

我显然错过了什么,有人能帮忙吗?谢谢

已更新……

我试过你的常识代码如下:

[mysqldg]
Description = DGDB 
Driver = mysql537
Database = dg1
Servername = 99.99.99.99
UID = odbc_dg
PWD = 999999
SSLKeyFile = /etc/mysql/ssl/ck.pem
SSLCertFile = /etc/mysql/ssl/cc.pem
SSLCAFile = /etc/mysql/ssl/c1.pem
<?php

$host = '46.99.199.199';
$db   = 'dg';
$user = 'odbc_dg';
$pass = '999999';
$charset = 'utf8mb4';
$options = array(

    PDO::MYSQL_ATTR_SSL_KEY => '/etc/mysql/ssl/ck.pem',
    PDO::MYSQL_ATTR_SSL_CERT => '/etc/mysql/ssl/cc.pem',
    PDO::MYSQL_ATTR_SSL_CA => '/etc/mysql/ssl/c1.pem'
);


$dsn = "mysql:host=$host;dbname=$db;charset=$charset";

try {
    $pdo = new PDO($dsn, $user, $pass, $options);
} catch (PDOException $e) {
    echo 'Connection failed: ' . $e->getMessage();
}


?>

。。。但我收到一条连接失败消息-连接失败:SQLSTATE[HY000][2002]

我认为问题在于,我提供的密钥只适用于ODBC

例如,此代码使用odbc_connect工作

<?php

ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);

$user = "odbc_dg";
$pass = "99999";

$connection = "Driver=  {mysql537};Server=46.99.199.199;Database=dgdb;UID=dgdb;PWD=999999;sslca=/etc/mysql/ssl/c1.pem;sslkey=/etc/mysql/ssl/ck.pem;sslcert=/etc/mysql/ssl/cc.pem";

$con = odbc_connect($connection, $user, $pass);

$sql="SELECT Id from stk_item"; 
$rs=odbc_exec($con,$sql);

if (!$rs)   {
    exit("Error in SQL");
}

echo "<table><tr>";
echo "<th>Companyname</th>";
echo "<th>Contactname</th></tr>";

while (odbc_fetch_row($rs)) {
   echo odbc_result($rs, "Id"), "\n";
}


odbc_close($con);
echo "</table>";

?>


我的问题是我想通过pdo连接到远程数据库,因为这是Drupal同步代码中唯一允许的连接类型

如果我将$dsn更改为添加前缀“odbc”,即$dsn='odbc:mysqldg';我会收到一个新的错误连接失败:SQLSTATE[08S01]SQLConnect:2002[unixODBC][MySQL][odbc 5.3(w)Driver]无法通过socket'/tmp/MySQL.sock'连接到本地MySQL服务器(2)如果我将$dsn更改为添加前缀“odbc”即$dsn='odbc:mysqldg';我收到一个新的错误连接失败:SQLSTATE[08S01]SQLConnect:2002[unixODBC][MySQL][ODBC 5.3(w)驱动程序]无法通过套接字'/tmp/MySQL.sock'(2)连接到本地MySQL服务器