为什么无法连接到mysql?

时间:2018-07-30 05:55:12

标签: php

这是我的代码在Xampp的本地PC上工作正常:

$this->dbh = new PDO('mysql:host=localhost;dbname=dbdata', 'root','123456');
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

phi.ini:

;extension=php_bz2.dll
;extension=php_curl.dll
;extension=php_fileinfo.dll
;extension=php_ftp.dll
;extension=php_gd2.dll
;extension=php_gettext.dll
;extension=php_gmp.dll
;extension=php_intl.dll
;extension=php_imap.dll
;extension=php_interbase.dll
;extension=php_ldap.dll
extension=php_mbstring.dll
;extension=php_exif.dll      ; Must be after mbstring as it depends on it
extension=php_mysqli.dll
;extension=php_oci8_12c.dll  ; Use with Oracle Database 12c Instant Client
;extension=php_odbc.dll
extension=php_openssl.dll
;extension=php_pdo_firebird.dll
extension=php_pdo_mysql.dll
;extension=php_pdo_oci.dll
;extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
;extension=php_pdo_sqlite.dll
extension=php_pgsql.dll
;extension=php_shmop.dll

但是当我将其上传到服务器时:使用 win server 2012 apache 2.4 php 7.1 , 给定的错误发生了:

  

PDOException:PDO :: __ construct():PHP是在没有openssl扩展的情况下构建的,无法发送使用加密的密码

     

C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWDB.php:41堆栈跟踪:#0   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWDB.php(41):   PDO-> __ construct('mysql:host = loca ...','root','123456')#1   C:\ Apache24 \ htdocs \ simsodep \ app \ model \ Home.php(21):   ACWDB-> __ construct()#2   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWController.php(164):   Home_model :: action_index()#3   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWController.php(32):   ACWController-> dispach()#4   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWCore.php(116):   ACWController-> main(NULL)#5   C:\ Apache24 \ htdocs \ simsodep \ index.php(44):ACWCore :: acwork()#6 {main}   下一个PDOException:SQLSTATE [HY000] [1045]用户的访问被拒绝   的'root'@'localhost'(使用密码:是)   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWDB.php:41堆栈跟踪:#0   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWDB.php(41):   PDO-> __ construct('mysql:host = loca ...','root','123456')#1   C:\ Apache24 \ htdocs \ simsodep \ app \ model \ Home.php(21):   ACWDB-> __ construct()#2   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWController.php(164):   Home_model :: action_index()#3   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWController.php(32):   ACWController-> dispach()#4   C:\ Apache24 \ htdocs \ simsodep \ acwork \ class \ ACWCore.php(116):   ACWController-> main(NULL)#5   C:\ Apache24 \ htdocs \ simsodep \ index.php(44):ACWCore :: acwork()#6 {main}

为什么无法连接到mysql?

3 个答案:

答案 0 :(得分:1)

似乎在您的php.ini中未启用openssl之类的内容。首先打开php.ini文件

如果您使用的是Linux,请找到 extension = php_openssl.so 并取消注释。

对于Windows,找到 extension = php_openssl.dll 并取消注释。

如果没有,请确保在文件顶部添加使用PDO;

祝你好运!

答案 1 :(得分:1)

从MySQL文档开始:

如果您的MySQL安装必须服务于8.0之前的客户端,并且在升级到MySQL 8.0或更高版本后遇到兼容性问题,则解决这些问题并恢复8.0之前的兼容性的最简单方法是将服务器重新配置为恢复为先前的默认设置身份验证插件

更改my.cnf文件中的默认身份验证插件设置,然后重新启动MySQL服务。

[mysqld] default_authentication_plugin = mysql_native_password

还要更改帐户身份验证插件和密码:

使用mysql_native_password通过'password'标识ALTER USER'root'@'localhost';

对我有用。

答案 2 :(得分:0)

我有同样的错误。解决方案:\ n -像管理员一样打开控制台 -登录数据库。 mysql范例:mysql -u username -p 登录后,它应该可以工作。为什么?我不知道确切。