• 73阅读
  • 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:),很是烦人,查看了很多前辈们的博客,最终找到了这些方法,留作后用吧,万一哪天又忘记了......................... 4 X`^{~  
< l[` "0  
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来替代。 .BL:h&h|y  
+"=~o5k3Q  
=eYO;l y3  
\UQ],+H  
解决方法1: 0*{p Oe/u  
禁止php报错 w:R]!e_6\9  
bV7QVu8  
display_errors = On w{ m#Yt  
改为 %0(>!SY  
display_errors = Off "GBUQ}  
鉴于这个服务器都是给用户用的,有时候他们需要报错,不能这做,让他们改程序吧 1 ' %-y  
s.e y!ew  
下面就是我们常用的方法了: =z%s8D2  
Nuo<` 6mV@  
解决方法2: F13%)G(  
常用的php语法连接mysql如下 #|D:f~"d3  
.P x,=56$X  
复制代码 1r&AB!Z #  
<?php xKisL=l6Y  
$link = mysql_connect('localhost', 'username', 'password'); !-@SS>  
mysql_select_db('db_name', $link); ; vhnA$'a  
将mysql_connect() T&e%/  
改成mysqi_connect() A` oa|k!U  
<?php (rMTW+,  
$link = @mysqli_connect('localhost', 'username', 'password', 'db_name'); !WDn7j'A  
复制代码 8Na}Wp;|Gi  
常用mysql建表SQL如下 + 4++Z  
XWJ0=t&}  
<?php PP~CZ2Fze  
//  旧写法 K>`m_M"LA  
mysql_query('CREATE TEMPORARY TABLE `table`', $link); kvY} yw7  
// 新的 s2kGU^]y  
mysqli_query($link, 'CREATE TEMPORARY TABLE `table`'); pU[a[  
解决方法三: eU<]h>2  
在php程序代码里面设置报警级别 [j]}$f Fe  
`K@5_db\  
<?php }j]<&I}  
error_reporting(E_ALL ^ E_DEPRECATED); W\ZV0T;<]  
如此一来,旧可以解决掉这个可恶的错误了 m7bn%j-{$f  
 
只看该作者 安逸沙发  发表于: 08-26
PHP在安装后,会在php.ini 文件中设置报错、提醒、警告等方式的出现,这样的方式可以使我们在调试PHP程序的时候能及时了解程序所存在的问题。然后,有时候我们并不需要提醒、警告 等内容,比如当我们使用PHP5.5(或更高)时,搭配MySql 开发环境时,使用了较老的 MySql连接方式,此时PHP 就会提示:请使用最新的 MySql 连接方式,当你在使用其读取数据库内容作为 json 格式(或其他)返回前台时,往往内容就会发生错误 _hh|/4(  
HENCQ_Wra  
Plq [Ml9  
qsk71L  
如何屏蔽这个错误呢,方法有下: 2{V|  
zi-+@9T  
1,在可能(或已经)发生提醒,或错误,或警告的页面添加屏蔽错误提醒: M9&tys[KX  
8OFrW.>[  
E,6E-9  
$Ilr.6';  
error_reporting(E_ALL ^ E_DEPRECATED); A.h?#%TLL  
H~~(v52wD  
//在本版本php5.5,已经不建议采用老式的mysql连接方法 u?J(l)gd  
7>~iS@7GV  
//但speedPHP还是沿用着老式的连接方法,这时php会报E_deprecated提示,此时关掉该提示就Ok了,也可以将 2 sOc]L:9  
0Gs]>B4r/  
//php置于部署模式(非开发模式),但最好的解决方法是采用最新的speedPHP *AA1e}R{B  
B~ez>/H^  
h/k`+  
jCl[!L5/1  
一般还可以使用下面的内容来解决一些 notice waring 等问题 >I!(CM":s$  
Iymz2  
ini_set("display_errors", 0); jl@8pO$  
gi6_la+  
error_reporting(E_ALL ^ E_NOTICE); {h=Ai[|l4Q  
xle29:?l  
error_reporting(E_ALL ^ E_WARNING); 9e5UTJ  
YH>n{o;- ?  
o (zg_!P  
]5\vYk  
2,打开php.ini文件,找到相关设置(如下图),将 on 改成 off,就可以屏蔽出错(不推荐此方法): pDLo`F}A  
7ou^wt+%  
1}pR')YL[  
e'Pa@]VaC  
;GAYcVB  
cjXwOk1:s  
有时候修改了 php.ini 的dispaly_errors 还是不行,那就参照下面的方法: 'w2;oO  
R;o_*  
修改php.ini,将display_errors = On 改为 display_errors = Off,结果还是不行。百度了下,原来还要在php-fpm.conf里设置。 *`#,^p`j b  
q*O KA5  
打开php-fpm.conf,找到: m"R(_E5  
+mQSlEo  
<value name="php_defines"> F 4/Uu"J:  
R5"p7>  
        </value><value name="sendmail_path">/usr/sbin/sendmail -t -i</value> ^&iV%vQ[  
">3@<f>  
<value name="display_errors">0</value> 9f,:j  
WFP\;(YV  
将其中的值从1改为0就可以了。 7VcVI? ?  
+`8)U3u0  
3,这种方法非常适用那些项目中已经决定要采用某种一定会引起 提醒 或 警告的方式,一招屏蔽,一劳永逸: Oq6n.:8g"  
$x;h[,y   
首先参照2,找到相关的 dispaly_errors 的位置,将 Off 改成 On )/"7$2Aoy  
e6lOmgHn5  
紧接着找到下图这个位置,修改你需要报错的级别,或不需要报错的级别 G4' U;  
I!gj;a?R  
|+-i'N9  
nM-SDVFM  
v`^J3A  
t<F]%8S  
参照的报错级别如下: 9ox|.68q  
o!`O i5  
J+jmSK%z  
%@n8 ?l4  
定义和用法: VHr7GAmU  
error_reporting() 设置 PHP 的报错级别并返回当前级别。 5;8B!%b  
_iJXp0g  
函数语法: [Am`5&J  
error_reporting(report_level) dP7Vs a+  
E\~ KVn  
如果参数 level 未指定,当前报错级别将被返回。下面几项是 level 可能的值: bro  
值 常量 描述 cPsn]U  
1 E_ERROR 致命的运行错误。错误无法恢复,暂停执行脚本。 bk"k&.C^+  
2 E_WARNING 运行时警告(非致命性错误)。非致命的运行错误,脚本执行不会停止。 BCUt`;q ]B  
4 E_PARSE 编译时解析错误。解析错误只由分析器产生。 <2O7R}j7v  
8 E_NOTICE 运行时提醒(这些经常是你代码中的bug引起的,也可能是有意的行为造成的。) -9>LvLU  
16 E_CORE_ERROR PHP启动时初始化过程中的致命错误。 G/z\^Q  
32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)。 ]TBtLU3  
64 E_COMPILE_ERROR 编译时致命性错。这就像由Zend脚本引擎生成了一个E_ERROR。 a We Bav}_  
128 E_COMPILE_WARNING 编译时警告(非致命性错)。这就像由Zend脚本引擎生成了一个E_WARNING警告。 :Wg-@d  
256 E_USER_ERROR 用户自定义的错误消息。这就像由使用PHP函数trigger_error(程序员设置E_ERROR) o"#TZB+k  
512 E_USER_WARNING 用户自定义的警告消息。这就像由使用PHP函数trigger_error(程序员设定的一个E_WARNING警告) _+\:OB[Y  
1024 E_USER_NOTICE 用户自定义的提醒消息。这就像一个由使用PHP函数trigger_error(程序员一个E_NOTICE集) 7"F|6JP"$c  
2048 E_STRICT 编码标准化警告。允许PHP建议如何修改代码以确保最佳的互操作性向前兼容性。 $89ea*k  
4096 E_RECOVERABLE_ERROR 开捕致命错误。这就像一个E_ERROR,但可以通过用户定义的处理捕获(又见set_error_handler()) VX;zZ`BJ  
8191 E_ALL 所有的错误和警告(不包括 E_STRICT) (E_STRICT will be part of E_ALL as of PHP 6.0) 6h2x~@  
j,=*WG  
F?b'L JS  
`10X5V@hP  
m<4s*q0\i  
ZcMj=#i  
e&$p-0DmT|  
例子: ]{!!7Zz  
任意数目的以上选项都可以用“或”来连接(用 OR 或 |),这样可以报告所有需要的各级别错误。 R}DX(T,K  
例如,下面的代码关闭了用户自定义的错误和警告,执行了某些操作,然后恢复到原始的报错级别: sDLS*467  
:be:-b%K  
Fweh =v  
h/I@_?k+  
<?php b fp,zs  
//禁用错误报告 \O kc5;kB2  
error_reporting(0); dgS4w@)@V;  
tC&fA E:S  
//报告运行时错误 =G( *gx  
error_reporting(E_ERROR | E_WARNING | E_PARSE); 0Tcz[$?  
MZT6g.ny  
//报告所有错误 @l'G[jN5  
error_reporting(E_ALL); :.#z  
?>
快速回复

限100 字节
安逸网提示:批量上传需要先选择文件,再选择上传
 
认证码:
上一个 下一个