Неверное имя источника данных - подключение к MySQL с php, PDO и DSN - PullRequest
1 голос
/ 21 апреля 2019

Этот скрипт

<?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.

...