【问题标题】:PHP PDO MySQL Tunnel Connection Double Port [duplicate]PHP PDO MySQL隧道连接双端口[重复]
【发布时间】:2017-09-23 07:27:38
【问题描述】:

在我安装我的应用程序并且工作正常之前,但是当我在具有相同代码和配置的其他设备上进行新安装时, 尝试在 yii 1 上使用 pdo 扩展连接隧道 mysql 时出现错误。

这样的错误信息:

CDbConnection 无法打开数据库连接:SQLSTATE[HY000] [2002] 无法解析地址“localhost:3307:3306”

我只想连接端口3307,但自动包含:3306

我已经尝试了一些方法,但仍然无法正常工作

我的主要配置:

'db' => array(
    'class' => 'CDbConnection',
    'connectionString' => !empty($ini['db']['conn_str'])
        ? $ini['db']['conn_str'] : 'mysql:host=localhost;dbname=xxx',
    'username' => !empty($ini['db']['user'])
        ? $ini['db']['user'] : 'root',
    'password' => isset($ini['db']['password'])
        ? $ini['db']['password'] : 'xxx',
    'tablePrefix' => !empty($ini['db']['prefix'])
        ? $ini['db']['prefix'] : 'dcl_',
    'emulatePrepare' => true,
    'charset' => 'utf8',
    'schemaCachingDuration' => 86400,
    'enableParamLogging' => TRUE,
    'enableProfiling' => TRUE,
),

'dbmm' => array(
    'class' => 'CDbConnection',
    'connectionString' => !empty($ini['dbmm']['conn_str'])
        ? $ini['dbmm']['conn_str'] : 'mysql:host=localhost;dbname=xxx',
    'username' => !empty($ini['dbmm']['user'])
        ? $ini['dbmm']['user'] : 'root',
    'password' => isset($ini['dbmm']['password'])
        ? $ini['dbmm']['password'] : 'xxx',
    'tablePrefix' => !empty($ini['dbmm']['prefix'])
        ? $ini['dbmm']['prefix'] : 'mm_',
    'emulatePrepare' => true,
    'charset' => 'utf8',
    'schemaCachingDuration' => 86400,
    'enableParamLogging' => TRUE,
    'enableProfiling' => TRUE,
    'attributes' => array(
        PDO::MYSQL_ATTR_LOCAL_INFILE => true
    ),
),

'dbantrian' => array(
    'class' => 'CDbConnection',
    'connectionString' => !empty($ini['dbantrian']['conn_str'])
        ? $ini['dbantrian']['conn_str'] : 'mysql:host=localhost;dbname=xxx',
    'username' => !empty($ini['dbantrian']['user'])
        ? $ini['dbantrian']['user'] : 'root',
    'password' => isset($ini['dbantrian']['password'])
        ? $ini['dbantrian']['password'] : 'xxx',
    'emulatePrepare' => true,
    'charset' => 'utf8',
    'schemaCachingDuration' => 86400,
    'enableParamLogging' => TRUE,
    'enableProfiling' => TRUE,
),

我的 .ini 文件:

[db]
conn_str = "mysql:host=localhost:3307;dbname=xxx"
user = "root"
password = "xxx"
prefix = "dcl_"

[dbmm]
conn_str = "mysql:host=localhost:3307;dbname=xxx"
user = "root"
password = "xxx"
prefix = "mm_"

[dbantrian]
conn_str = "mysql:host=localhost:3307;dbname=xxx"
user = "root"
password = "xxx"

我使用的工具:

  • Ubuntu 16
  • Ajenti V
  • Nginx
  • PHP 5.6
  • PDO 和 PDO Mysql
  • MariaDB 5.7

我不能使用PHP PDO initialization fails due to "double port" - Uncaught PDOException: SQLSTATE[HY000] [2002]的解决方案,因为我不允许更新yii的核心文件

我不知道我想念什么

感谢之前,对不起我的英语

更新: 我在旧设备上的应用在sudo apt upgrade 之后出现错误(比如在我的新应用上)

Setting up php5.6-common (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-curl (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-sqlite3 (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-mbstring (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-xml (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-gd (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-readline (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-mcrypt (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-json (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-mysql (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-opcache (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-cli (5.6.30-10+deb.sury.org~xenial+2) ...
Setting up php5.6-fpm (5.6.30-10+deb.sury.org~xenial+2) ...
NOTICE: Not enabling PHP 5.6 FPM by default.
NOTICE: To enable PHP 5.6 FPM in Apache2 do:
NOTICE: a2enmod proxy_fcgi setenvif
NOTICE: a2enconf php5.6-fpm
NOTICE: You are seeing this message because you have apache2 package installed.
Setting up php-msgpack (2.0.2+0.5.7-1+deb.sury.org~xenial+2) ...
Setting up php-mysql (1:7.1+52+deb.sury.org~xenial+1) ...
Setting up php-pgsql (1:7.1+52+deb.sury.org~xenial+1) ...

【问题讨论】:

  • 您的 PDO 连接代码是什么样的?编辑您的问题以添加它,它应该更明显出了什么问题。
  • 已编辑。我用的是Yii1,所以我只是添加连接配置
  • 已解决。将host=localhost:3307 更改为host=127.0.0.1;port=3307
  • 所以这是两个问题,一个是localhost,另一个是port=部分的格式。
  • 是的,没错

标签: php mysql pdo port tunnel


【解决方案1】:

配置字符串应如下所示:

mysql:host=localhost;port=3307;...

port 部分必须与host 分开。

【讨论】:

  • 我已经尝试过代码但不起作用。当我使用上述方法时,yii 喜欢忽略端口值
  • 就在PDO manual外面,和Yii documentation一样,所以我不知道该说什么。
猜你喜欢
  • 2016-08-26
  • 1970-01-01
  • 2011-09-13
  • 1970-01-01
  • 2018-10-06
  • 2012-06-19
  • 2011-07-22
  • 1970-01-01
  • 2011-07-08
相关资源
最近更新 更多