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

时间:2019-04-21 05:36:47

标签: 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->getMessage();
}

?>

给出错误连接失败:无效的数据源名称

我已经在 /etc/odbc.ini 中创建了一个条目,如下所示:

[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

/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连接。

我显然缺少了什么,有人可以帮忙吗?谢谢。

已更新。...

我尝试了以下常识代码:

<?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同步代码中允许的唯一连接类型。

0 个答案:

没有答案