php - MySQLi real_connect 失败
问题描述
我无法在下面的 PHP 代码中使用 SSL 连接 MySQL 数据库(存在于另一台服务器中)。我尝试了链接中的步骤:https ://docs.microsoft.com/en-us/azure/mysql/howto-configure-ssl
谁能告诉我这些步骤应该做什么?
仅供参考,我可以从命令行连接 MySQL 数据库。
无法连接到 MySQL:php_network_getaddresses:getaddrinfo
失败:名称或服务未知
$db = mysqli_init();
//mysqli_options ($db, MYSQLI_OPT_SSL_VERIFY_SERVER_CERT, true);
mysqli_ssl_set($db,"/var/www/html/path/cert/client-key.pem","/var/www/html/path/cert/client-cert.pem","/var/www/html/path/BaltimoreCyberTrustRoot.crt.pem",NULL,NULL);
$c=mysqli_real_connect($db, 'example.com','uname@uname','mypassword','database',3306,NULL, MYSQLI_CLIENT_SSL);
if(mysqli_connect_errno($db)){
echo "<br>Failed to connect to MySQL: " . mysqli_connect_error();
}
else
{
$sql = 'show tables ';
echo $sql.'<br>';
$result = mysqli_query($db,$sql);
$rows = array();
if(!empty($result)){
while ($row = mysqli_fetch_assoc($result)){
$rows[] = $row;
echo '<pre>'; echo json_encode($row, JSON_PRETTY_PRINT);
}
}
}
解决方案
你在 Azure 中尝试这个吗?请确保 pem 文件具有正确的路径和权限
连接数据库时要解决的问题:
下载此 pem 密钥并将文件重命名为“ BaltimoreCyberTrustRoot.crt.pem ” https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem
在 Azure 服务器中启用 SSL 连接。
- 直接在数据库中运行 MySQL 命令“status”并检查SSL: Cipher in use is AES256-SHA
- 在测试文件中添加以下代码,并确保主机名、用户名、密码、端口和 pem 文件的路径和权限非常正确。
尝试以下代码示例:
{
$db = mysqli_init(); mysqli_ssl_set($db,NULL,NULL,"/var/www/html/path/BaltimoreCyberTrustRoot.crt.pem",NULL,NULL);
$connection = mysqli_real_connect($db, 'example.com','uname@uname','mypassword','database_name',3306,NULL, MYSQLI_CLIENT_SSL);
if(mysqli_connect_errno($db))
{
echo "<br><b>Failed to connect to MySQL: " . mysqli_connect_error()."<b>";
}
else
{
$sql = 'show tables ';
$result = mysqli_query($db,$sql);
$rows = array();
if(!empty($result))
{
while ($row = mysqli_fetch_assoc($result)){
$rows[] = $row;
echo '<pre>'; print_R($row);
}
}
}
推荐阅读
- java - 如何在 java maven 项目中访问 azure 管道变量?
- flutter - Flutter dio不适用于flutter web中的post请求
- javascript - 删除重复错误,未定义数组 [x]
- javascript - 文件保存/加载后 Mxgraph 覆盖事件侦听器中断
- cookies - 登录后 Keycloak 更新用户区域设置
- linux - RedLevel1 和无法打开共享对象文件:没有这样的文件或目录
- php - 备份 sqlite 数据库时出现“文件不是数据库”错误
- c# - 使用 XMS 写入远程 IBM MQ 队列
- regex - 如何用“:”分割搜索词
- excel - 在数据透视图中为单个图表值创建永久趋势线