用php連接數(shù)據(jù)庫(kù)失敗的解決辦法:1、打開(kāi)php.ini配置文件,去掉“extension=php_mysql.dll”前面的注釋分號(hào),并通過(guò)extension指定“php_mysql.dll”的絕對(duì)路徑;2、修改mysql的my.ini配置文件;3、修改數(shù)據(jù)集字符集即可。
php入門(mén)到就業(yè)線上直播課:進(jìn)入學(xué)習(xí)
Apipost = Postman + Swagger + Mock + Jmeter 超好用的API調(diào)試工具:點(diǎn)擊使用
本教程操作環(huán)境:Windows10系統(tǒng)、PHP8.1版、Dell G3電腦。
用php連接數(shù)據(jù)庫(kù)失敗怎么辦?
PHP連接mysql遇到的坑(附解決方法,親測(cè)有效)
PHP連接mysql遇到的坑
環(huán)境: win10 + PHP5.48 + Apache2.2 + Mysql8.017
PHP連接實(shí)例
<?php $link = mysql_connect("localhost", "myuser", "mypasswd"); #myuser: 用戶名 #mypasswd: 密碼 var_dump($link); mysql_close();?>
登錄后復(fù)制
坑1 Call to undefinedfunction mysql_connect()

原因: mysql_connect()函數(shù)未定義,php.ini配置文件中未開(kāi)啟
解決方法:
1.1 配置php.ini函數(shù)

1.1.1 去掉extension=php_mysql.dll前面的注釋分號(hào);
1.1.2 通過(guò)extension指定php_mysql.dll的絕對(duì)路徑
1.2 配置文件路徑
1.2.1 將php.ini文件拷貝至c:windowssystem32下
1.3 重啟Apache服務(wù)(具體怎么重啟就不說(shuō)了,如果這個(gè)都不知道,那本文對(duì)你沒(méi)幫助)
坑2 The server requested authentication method unknown to the client

原因: mysql8.x的密碼鎖機(jī)制不一致導(dǎo)致的
在 mysql 8.x 以后,caching_sha2_password是默認(rèn)的身份驗(yàn)證插件,而不是以往的mysql_native_password。
解決方法
1.1 修改mysql的my.ini配置文件

可以看到默認(rèn)的驗(yàn)證方式是caching_sha2_password ,這里修改為mysql_native_password
1.2 mysql中查看對(duì)應(yīng)用戶身份驗(yàn)證插件

可以看到root用戶的身份驗(yàn)證插件已經(jīng)改為了mysql_native_password
如果身份驗(yàn)證方式?jīng)]變,執(zhí)行如下操作
# 登陸mysqlmysql -uroot -p# 使用mysql數(shù)據(jù)庫(kù)use mysql;# 修改身份驗(yàn)證插件ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';
登錄后復(fù)制
坑3 字符集錯(cuò)誤 sever sent charset unknowd to the client ,Please report to the decelopers

原因: MySQL8更換了默認(rèn)的服務(wù)器字符集,mysql8.x的字符集character-set-server
默認(rèn)是utf8mb4
,不再是5.x時(shí)代的utf8了
解決方法:
修改mysql的my.ini配置文件,具體修改條目如下:(這里只展示了需要修改的條目,原配置文件內(nèi)容很多)
[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]collation-server = utf8_unicode_cicharacter-set-server = utf8
登錄后復(fù)制
切記:任何每一次的修改,都需要重啟Apache服務(wù),以及mysql服務(wù)!!!
推薦學(xué)習(xí):《PHP視頻教程》