下面的脚本在Centos服务器上运行,并试图连接到另一台需要SSL参数的服务器上的MySQL数据库。脚本中使用的凭据可以通过Microsoft Access DSN连接正常使用。
<?php
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);
$pdo = new PDO('mysql:host=99.99.199.199;dbname=dummy1', 'user1', 'pwd1',
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'
));
$statement = $pdo->query("SHOW TABLES;");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);
?>
上面的代码给出 SSL操作失败,代码为1 -这是完整的消息:
致命错误:未捕获PDOException:PDO :: __ construct():SSL操作 失败,代码1。OpenSSL错误消息:error:14090086:SSL 例程:ssl3_get_server_certificate:证书验证失败 /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php:10 堆栈跟踪:#0 /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php(10):PDO-> __ construct('mysql:host = 99.9 ...','odbc_guil ...', 'pwd1', 数组)#1 {main}下一个PDOException:SQLSTATE [HY000] [2002] in /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php:10堆栈跟踪: #0 /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php(10):PDO-> __ construct('mysql:host = 99.9 ...','odbc_guil ...','pwd1' , 数组)#1 {main}被抛出 /var/www/vhosts/zzzzz.org/httpdocs/zzodbc/dgodbc1.php,第10行
我已验证凭据(包括带有DSN连接的SSL参数)。我检查了SSL密钥是否正确位于 / etc / mysql / ssl 目录中。
任何建议我做错事的帮助都会很好。谢谢。
我可能一直以错误的方式进行此操作。... 由于这些键可与ODBC一起使用,因此我认为我应该使用odbc_connect并发送与MS访问(例如
)相同的字符串$user = "user";
$pass = "pwd";
$connection = "Driver={MySQL ODBC 5.1 Driver};Server=46.51.178.163;Database=db1;sslca=/etc/mysql/ssl/c1.pem;sslkey=/etc/mysql/ssl/ck.pem;sslcapath=/etc/mysql/ssl/;sslcert=/etc/mysql/ssl/cc.pem";
$con = odbc_connect($connection, $user, $pass);
但是要使其正常工作,我需要在目前正在使用的服务器上安装MySQL连接器。
答案 0 :(得分:0)
我已经解决了这个问题-感谢所有提供帮助的人。这是我所学到的:
这些文件到位后,您需要在/ etc文件夹中的 odbcinst.ini 中添加一个条目。我使用了nano,因此命令行 nano odbcinst.ini 调出了具有PostgresSQL模型入口的文件。如果服务器是64位的,那么这些是我在odbcinst.ini中输入的内容: [mysql537] 驱动程序64 = /usr/lib/odbc2/lib/libmyodbc5w.so Setup64 = /usr/lib/odbc2/lib/libmyodbc5w.so UsageCount = 1
您必须具有... 64路径,否则找不到驱动程序(即Driver64 = NOT Driver =)。我首先犯了这个错误。
以下是有效的代码(连接字符串与Microsoft Access连接中使用的字符串完全相同):
<?php
ini_set ('error_reporting', E_ALL);
ini_set ('display_errors', '1');
error_reporting (E_ALL|E_STRICT);
$user = "odbcmmm";
$pass = "999999999";
$connection = "Driver={mysql537};Server=99.99.199.199;Database=db_name;UID=odbc_db_name;PWD=password;sslca=/etc/mysql/ssl/c1.pem;sslkey=/etc/mysql/ssl/ck.pem;sslcapath=/etc/mysql/ssl/;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");
}
我希望这是有用的。