MySQLi real_connect 失败
MySQLi real_connect Failed
我无法在下面的 PHP 代码中使用 SSL 连接 MySQL 数据库(存在于另一台服务器中)。
我尝试了 link 中的步骤: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);
}
}
}
我无法在下面的 PHP 代码中使用 SSL 连接 MySQL 数据库(存在于另一台服务器中)。 我尝试了 link 中的步骤: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);
}
}
}