php - Azure 连接到 Windows 虚拟机 MySql 的 CodeIgniter

标签 php mysql codeigniter azure virtual-machine

我正在开发一个托管在 Azure 上的 CodeIgniter Web 项目,我决定按照本教程在 Azure 中运行 Windows Server 2012 R2 的虚拟机上使用 MySQL,因为它似乎是最佳解决方案。 https://azure.microsoft.com/en-gb/documentation/articles/virtual-machines-mysql-windows-server-2008r2/

我已经完成了所有设置,并且还设法将我的 Web 项目中托管的 phpmyadmin 连接到虚拟机,因此确认一切正常。

但是,Codeigniter 每次都会继续给出此错误

Unable to connect to your database server using the provided settings.

Filename: D:\home\site\wwwroot\system\database\DB_driver.php

Line Number: 124

我决定使用以下代码在安装的根目录中创建一个测试 php 文件,并且它连接成功。

<?php
// Create connection : Update the hostname , DB username , DB password 
//, database name. 

$con=mysqli_connect("host","user","password",
"database");

// Check connection
if (mysqli_connect_errno()) {
    echo "Failed to connect to MySQL: " . mysqli_connect_errno();
}
else
{
    echo "Connection with MySQL database was successful";
}
?>

请注意值已更改

我进入 system/database/drivers/mysql/mysql_driver.php 并删除了“@”符号以显示 db_pconnect() 的确切调试错误,我得到了

A PHP Error was encountered

Severity: Warning

Message: mysql_pconnect(): Access denied for user 'user'@'191.236.147.142' (using password: YES)

Filename: mysql/mysql_driver.php

Line Number: 91

但是这些相同的细节适用于我上面提到的单独的 php 脚本。这是我的 codeIgniter 数据库配置

$active_group = 'default';
$active_record = TRUE;

$db['default']['hostname'] = 'myvmmysql.cloudapp.net';
$db['default']['username'] = 'user';
$db['default']['password'] = 'password';
$db['default']['database'] = 'database';
$db['default']['port'] = 3306;


$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

以下是我迄今为止所做工作的摘要:

  1. 我已经尝试过 $db['default']['dbdriver'] 的 mysql、mysqli 和 sqlsrv
  2. 我还在 test.php 文件中尝试了 mysql,它仍然连接到数据库
  3. 我已授予虚拟机中所有域对该端口的公共(public)访问权限
  4. 我已将所有权限授予所有域中的数据库用户
  5. 连接基本上可以在除 codeigniter 之外的任何地方工作。
  6. 我也尝试过更改 $db['default']['pconnect'] = FALSE;不是 在职的 注意:我已经完成了使用 codeigniter 数据库所需的必要操作...这还不止这些

谢谢

最佳答案

我尝试使用 2.2.3 和 3.0.0 版本的 codeiginter 重现您的问题,但失败了。我可以成功连接VM中的MySQL。

请尝试按照以下步骤操作:

1、在Azure上创建虚拟机,安装并配置MySQL。请引用教程:https://azure.microsoft.com/en-gb/documentation/articles/virtual-machines-mysql-windows-server-2008r2/ .

2、在 Azure 上创建 Web 应用并从 git 设置部署。

3、下载condeiginter包到本地,修改

中的数据库连接信息
\application\config\database.php

$db['default']['hostname'] = '<your vm name>.cloudapp.net';

$db['default']['username'] = '<database username>';

$db['default']['password'] = '<password>';

$db['default']['database'] = '<database name>';

4、在本地测试MySQL连接,并部署到上面通过git创建的Web应用程序。浏览网络应用程序。

这对我有用。

此外,当我们向数据库用户输入无密码时,我们可能会遇到此问题。因此,请检查 application\config\database.php 中的数据库密码。

顺便说一句,您可以使用本地的工作台连接到MySQL Server来检查该错误是否存在。

关于php - Azure 连接到 Windows 虚拟机 MySql 的 CodeIgniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31691404/

相关文章:

php - 插入mysql的下拉列表中的值都是相同的

php - 对表进行分组后将表内部连接到自身

mysql - 如何在求和函数中乘以 2 列

codeigniter 分页 - 每页的结果都相同

php - 在php中仅删除mysql表的一行的一个字段

php - 从数据库中选择时的隐藏字段更改

php - 在使用 PHP 保存到服务器之前将图像转换为 pdf

javascript - 使用ajax在codeigniter中提交表单

php - MySQL连接数据库 fatal error

php - Symfony 2.0 我把我的 base.css 文件放在哪里