• 1044阅读
  • 1回复

错误Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed

楼层直达
今天写PHP代码,遇到了这个非常不友好的报错(Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future:),很是烦人,查看了很多前辈们的博客,最终找到了这些方法,留作后用吧,万一哪天又忘记了......................... n]9y Cr  
*QjFrw3  
php 5个版本,5.2、5.3、5.4、5.5,怕跟不上时代,新的服务器直接上5.5,但是程序出现如下错误:Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in,看意思就很明了,说mysql_connect这个模块将在未来弃用,请你使用mysqli或者PDO来替代。 uo 7AU3\  
\P{VJ^) 0  
*]x]U >EF  
x]y~KbdeB  
解决方法1: ZL1[Khr,s  
禁止php报错 oWx! 'K6]V  
93o}vy->  
display_errors = On v9M ;W+J  
改为 7*@qd&  
display_errors = Off 9.1%T06$  
鉴于这个服务器都是给用户用的,有时候他们需要报错,不能这做,让他们改程序吧 o1I{^7/  
Y}nE/bmx&9  
下面就是我们常用的方法了: /o8h1L=  
lm]4zs /A  
解决方法2: nuKjp Ap!  
常用的php语法连接mysql如下 DFR.F:O%  
#.Ft PR  
复制代码 ^U:pv0Qz  
<?php B{c,/{=O  
$link = mysql_connect('localhost', 'username', 'password'); z#bO FVg#  
mysql_select_db('db_name', $link); d t0?4 d  
将mysql_connect() <P}{0Y~@*W  
改成mysqi_connect() /-G;#Wm  
<?php rDUNA@r  
$link = @mysqli_connect('localhost', 'username', 'password', 'db_name'); Qmzj1e$6x  
复制代码 ,C(")?4aJ  
常用mysql建表SQL如下 . (Q;EF`_U  
6D3fkvc Z  
<?php l)=Rj`M  
//  旧写法 (#LV*&K%IC  
mysql_query('CREATE TEMPORARY TABLE `table`', $link); 1&Nk  
// 新的 73 D|gF*  
mysqli_query($link, 'CREATE TEMPORARY TABLE `table`'); )#IiHBF  
解决方法三: 0@^YxU[YN  
在php程序代码里面设置报警级别 &Q(Q/]U~  
5pE[}@-c9  
<?php 2syKYHV  
error_reporting(E_ALL ^ E_DEPRECATED); B5zu?AG  
如此一来,旧可以解决掉这个可恶的错误了 8O("o7~"  
只看该作者 安逸沙发  发表于: 2019-08-26
PHP在安装后,会在php.ini 文件中设置报错、提醒、警告等方式的出现,这样的方式可以使我们在调试PHP程序的时候能及时了解程序所存在的问题。然后,有时候我们并不需要提醒、警告 等内容,比如当我们使用PHP5.5(或更高)时,搭配MySql 开发环境时,使用了较老的 MySql连接方式,此时PHP 就会提示:请使用最新的 MySql 连接方式,当你在使用其读取数据库内容作为 json 格式(或其他)返回前台时,往往内容就会发生错误 GP&vLt51  
UJfEC0  
oqLfesV~  
A5i:x$ww  
如何屏蔽这个错误呢,方法有下: 9G{;?c  
ow0!%|fO  
1,在可能(或已经)发生提醒,或错误,或警告的页面添加屏蔽错误提醒: G:pEE:W[  
N\HQN0d9  
<{2e#Y  
+T=(6dr  
error_reporting(E_ALL ^ E_DEPRECATED);  ?p(/_@  
%H]lGN)  
//在本版本php5.5,已经不建议采用老式的mysql连接方法 HcedE3Rg  
`)T~psT  
//但speedPHP还是沿用着老式的连接方法,这时php会报E_deprecated提示,此时关掉该提示就Ok了,也可以将 [Z~ 2  
`5~ +,/Ys  
//php置于部署模式(非开发模式),但最好的解决方法是采用最新的speedPHP @BrMl%gV  
zoDH` h_  
AgRjr"hF*e  
5*E#*H  
一般还可以使用下面的内容来解决一些 notice waring 等问题 B9T!j]'  
' j6gG  
ini_set("display_errors", 0); vTaJqEE  
l#lF +Q;  
error_reporting(E_ALL ^ E_NOTICE); V\})3i8  
@^;j)%F}  
error_reporting(E_ALL ^ E_WARNING); M.nvB)  
W`"uu.~f  
Ov#=]t5  
 Y!WG)u5  
2,打开php.ini文件,找到相关设置(如下图),将 on 改成 off,就可以屏蔽出错(不推荐此方法): OiAJ[L  
}BiiE%a  
#/NS&_Ge0s  
? tfT8$  
A>[|g`;t  
%lX%8Z$v  
有时候修改了 php.ini 的dispaly_errors 还是不行,那就参照下面的方法: CiR%Ujf  
2kv7UU#q2  
修改php.ini,将display_errors = On 改为 display_errors = Off,结果还是不行。百度了下,原来还要在php-fpm.conf里设置。 H"Klj_<dH0  
Kf 2jD4z}  
打开php-fpm.conf,找到: O$kq`'9  
lQfL3`X!  
<value name="php_defines"> 0 a~HiIh  
GabYfUkO  
        </value><value name="sendmail_path">/usr/sbin/sendmail -t -i</value> vA)O {W\o  
p#SY /KIw  
<value name="display_errors">0</value> ;Nr]X  
IScRsxFb  
将其中的值从1改为0就可以了。 $ n,Z  
9s}Kl($  
3,这种方法非常适用那些项目中已经决定要采用某种一定会引起 提醒 或 警告的方式,一招屏蔽,一劳永逸: u*7Z~R  
[ BT)l]  
首先参照2,找到相关的 dispaly_errors 的位置,将 Off 改成 On `.#@@5e  
]NhS=3*i+  
紧接着找到下图这个位置,修改你需要报错的级别,或不需要报错的级别 D;Gq)]O  
tn|,O.t  
+Z!;P Z6  
!3oKmL5  
M}0eu(_|  
p.fF}B  
参照的报错级别如下: .bf<<+'o  
5FC4@Ms`  
/,5Z-Z*wq  
rVQX7l#YI  
定义和用法: Lc<eRVNd,  
error_reporting() 设置 PHP 的报错级别并返回当前级别。 +VEU:1Gt  
6Ggs JU  
函数语法: R*1kR|*_)  
error_reporting(report_level) nY `2uN~9  
%'L;FPxB  
如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值: %K 4  
值 常量 描述 +rNkN:/L  
1 E_ERROR 致命的运行错误。错误无法恢复,暂停执行脚本。 <XQ.A3SG!  
2 E_WARNING 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。 }xn_6  
4 E_PARSE 编译时解析错误。解析错误只由分析器产生。 =Pe><k  
8 E_NOTICE 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。) OQlG+|  
16 E_CORE_ERROR PHP启动时初始化过程中的致命错误。 NB8&   
32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)。 5b #QYu  
64 E_COMPILE_ERROR 编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR。 /jD-\,:L}  
128 E_COMPILE_WARNING 编译时警告(非致命性错)。这就像由Zend脚本引擎生成了一个E_WARNING警告。 UWG+#,1J.\  
256 E_USER_ERROR 用户自定义的错误消息。这就像由使用PHP函数trigger_error(程序员设置E_ERROR) sDiHXDI_m  
512 E_USER_WARNING 用户自定义的警告消息。这就像由使用PHP函数trigger_error(程序员设定的一个E_WARNING警告) NVIWWX9?  
1024 E_USER_NOTICE 用户自定义的提醒消息。这就像一个由使用PHP函数trigger_error(程序员一个E_NOTICE集) Ef7:y|?  
2048 E_STRICT 编码标准化警告。允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性。 R U!?-#*  
4096 E_RECOVERABLE_ERROR 开捕致命错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获(又见set_error_handler()) ?;7b*Z  
8191 E_ALL 所有的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0) PjqeE,5  
:.IN?X  
Iz\1~  
SX+RBVZU  
`6w#8}  
DvT+`X?R  
-Wjh**  
例子: ku.A|+Tn  
任意数目的以上选项都可以用“或”来连接(用 OR 或 |),这样可以报告所有需要的各级别错误。 cx(2jk}6  
例如,下面的代码关闭了用户自定义的错误和警告,执行了某些操作,然后恢复到原始的报错级别: lmFA&s"m  
Gt^d;7x]  
|>utWT]S  
W);W.:F  
<?php ePA;:8)_j  
//禁用错误报告  5H.Db  
error_reporting(0); :('I)C  
x;U|3{I o  
//报告运行时错误 YBylyVZ  
error_reporting(E_ERROR | E_WARNING | E_PARSE); M_&4]\PkCy  
&>=#w"skb6  
//报告所有错误 JK^[{1 JI  
error_reporting(E_ALL); ~07RFR  
?>
快速回复

限100 字节
安逸网提示:如果您在写长篇帖子又不马上发表,建议存为草稿
 
认证码:
上一个 下一个