无效的数据源名称-使用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服务器