当前位置: 首页 > 编程日记 > 正文

解决 The mysql extension is deprecated and will be r

为什么80%的码农都做不了架构师?>>>   hot3.png

解决 The mysql extension is deprecated and will be removed in the future技术

maybe yes 发表于2015-07-27 15:19

原文链接 : http://blog.lmlphp.com/archives/132/Tutorial_of_solve_mysql_extension_is_deprecated_and_will_be_removed_in_the_future_of_php55  来自 : LMLPHP后院

PHP 5.5 默认是不支持 MySQL 扩展的,如果需要使用,可以使用 php5enmod mysql 打开。开启后使用 mysql_connect 的项目都会报错:[8192]mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in ... 。

PHP 核心开发组经过了很长时间的讨论,决定在 PHP5.5 版本后将 mysql_ 系列的函数标记为 deprecated,下面将给出如何解决这个问题的方法。

Why was mysql deprecated in PHP 5.5?
Johannes Schlüter, one of the PHP developers listed missing points like these:
Stored Procedures
Prepared Statements
(SSL-)Encryption
Compression
Full charset support

低级快速的解决方案:关闭 deprecated 类型的报错。特别提醒,过时报错使用 @ 符号是不能屏蔽的。

<?php
error_reporting(E_ALL ^ E_DEPRECATED);

更好的解决方案:修改数据库驱动类,使用 mysqli 系列函数代替 mysql 系列函数。

例如:当前许多 PHP 代码中 MySQL 的连接语句如下:

<?php
$link = mysql_connect('localhost', 'user', 'password');
mysql_select_db('dbname', $link);

将上面的语句修改为 MySQLI 连接,如下代码所示:

<?php
$link = mysqli_connect('localhost', 'user', 'password', 'dbname');

使用 mysqli 执行 SQL 的方式与 mysql 非常相似,如下示例:

<?php
// Old
mysql_query('CREATE TEMPORARY TABLE `lmlphp`', $link);
// New
mysqli_query($link, 'CREATE TEMPORARY TABLE `lmlphp`');

若在代码中使用了类似 mysql_result,mysql_fetch_array 等的函数,修改为对应的 mysqli_result,mysqli_fetch_array 即可。

除 了上面的解决方案外,也可以直接使用 PDO_MySQL 来操作数据库,个人感觉这个更好用。如果项目中的数据库驱动类是面向对象风格的,修改为 mysqli 会更加容易一些,使用 mysql_pdo 的代码风格完全不一样,切换过来比较困难。有点疑惑的是,为什么PHP 一定要放弃 MySQL 的扩展,而不通过改变函数内部实现来解决问题。

阅(453)评(0)查看评论

转载于:https://my.oschina.net/hosser/blog/711608

相关文章:

Android控件系统(三)——Window与WindowMananger

Android版本&#xff1a;7.0(API27) [TOC] 澄清几个概念 窗口&#xff08;不是指的Window类&#xff09;&#xff1a;这是一个纯语义的说法&#xff0c;即程序员所看到的屏幕上的某个独立的界面&#xff0c;比如一个带有Title Bar的Activity界面、一个对话框、一个Menu菜单等&a…

Restore Volume 操作 - 每天5分钟玩转 OpenStack(60)

前面我们 backup 了 voluem&#xff0c;今天我们将讨论如何 restore volume。 restore 的过程其实很简单&#xff0c;两步走&#xff1a; 在存储节点上创建一个空白 volume。 将 backup 的数据 copy 到空白 voluem 上。 下面我们来看 restore 操作的详细流程&#xff1a; …

gdb 查找动态库方法

当GDB无法显示so动态库的信息或者显示信息有误时&#xff0c;通常是由于库搜索路径错误导致的&#xff0c;可使用set sysroot、set solib-absolute-prefix、set solib-search-path来指定库搜索路径。 1. set sysroot 与 set solib-absolute-prefix 是同一条命令&#xff0c;实…

【ACM】杭电OJ 1004

题目链接&#xff1a;杭电OJ 1004 运行环境&#xff1a;Dev-C 5.11 思路&#xff1a; 先把先把num数组全部赋值为1&#xff1b;第一个颜色单独输入&#xff0c;从第二个开始&#xff0c;需要与前面的进行比较&#xff0c;如果前面有相同的颜色&#xff0c;则在目前的num[i]上…

zabbix 监控mysql(实例)

修改zabbix_agentd.conf UnsafeUserParameters1 UserParametermysql.version,mysql -V UserParametermysql.status[*],/usr/local/zabbix/share/zabbix/alertscripts/chk_mysql.sh $1 UserParametermysql.ping,mysqladmin ping | grep -c alive 设置mysql的链接 ln -s /data/my…

linux查看系统版本信息命令

几种查看Linux版本信息的方法&#xff1a; 1. uname -a 2. cat /proc/version 3. cat /etc/issue 4. lsb_release -a 详解 lsb_release -a 登录到服务器执行 lsb_release -a &#xff0c;即可列出所有版本信息&#xff0c;例如&#xff1a; 1. [root3.5.5Biz-46 ~]# lsb_releas…

【ACM】杭电OJ 1005

题目链接&#xff1a;杭电OJ 1005 超时代码如下&#xff08;而且开辟的数组空间大小不够&#xff09;: #include <stdio.h> int m[100000]; int f(int n,int a,int b) {m[1] 1;m[2] 1;for (int i 3; i < n; i){m[i] (a * m[i - 1] b * m[i - 2]) % 7;}return …

PostgreSQL:Java使用CopyManager实现客户端文件COPY导入

在MySQL中&#xff0c;可以使用LOAD DATA INFILE和LOAD DATA LOCAL INFILE两种方式导入文本文件中的数据到数据库表中&#xff0c;速度非常快。其中LOAD DATA INFILE使用的文件要位于MySQL所在服务器上&#xff0c;LOAD DATA LOCAL INFILE则使用的是客户端的文件。 LOAD DATA I…

c, c++函数名编译符号修饰符说明

C 编译器的函数名修饰规则 函数名字修饰&#xff08;Decorated Name&#xff09;方式 函数的名字修饰&#xff08;Decorated Name&#xff09;就是编译器在编译期间创建的一个字符串。用来指明函数的定义或原型。 LINK程序或其它工具有时须要指定函数的名字修饰来定位函数的正确…

VS Code - Debugger for Chrome调试JavaScript的两种方式

VS Code - Debugger for Chrome调试JavaScript的两种方式 最近由于出差的缘故&#xff0c;博客写的不是很多&#xff0c;一直想写一篇VS Code - Debugger for Chrome相关的文章&#xff0c;没想到一直拖到了今天。VS Code 开源以后确实在社区得到了很多人的支持&#xff0c;当中…

【ACM】杭电OJ 2018

题目链接&#xff1a;杭电OJ 2018 从n>4开始&#xff0c;每一年的牛的数量前一年的牛的数量三年前的牛的数量 问&#xff1a;为什么是三年前&#xff1f; 答&#xff1a;假设三年前有一头小牛出生&#xff0c;出生的那一年即为第一年&#xff0c;到了第四年&#xff0c;即…

python 帮助文档、自我解释

现在让我们以交互方式使用 Python 来开始研究。当我们从命令行启动 Python 时&#xff0c;就进入了 Python shell&#xff0c;在这里可以输入 Python 代码&#xff0c;而且立刻会从 Python 解释器获得响应。 清单 1. 以交互方式启动 Python 解释器 Python 2.7.15rc1 (default, …

RCF远程调用框架

介绍 RCF&#xff08;远程调用框架&#xff09;是一个C IPC框架&#xff0c;提供了一种在C 程序中实现进程间通信的简单而一致的方法。它基于强类型的客户端/服务器接口的概念&#xff0c;这是基于IDL的中间件&#xff08;如CORBA和DCOM&#xff09;的用户熟悉的概念。然而&am…

Python变量类型(l整型,长整形,浮点型,复数,列表,元组,字典)学习

#codingutf-8 __author__ Administrator#Python变量类型#Python数字&#xff0c;python支持四种不同的数据类型 int整型 long长整型 float浮点型 complex复数 var1 10; #表示整型 var2 678L #表示长整型 var3 12.34;#表示浮点型 var4 123j #复数 var5 12345j #复数print(…

【ACM】杭电OJ 2020(排序)

题目链接&#xff1a;杭电OJ 2020 排序可以有冒泡排序&#xff0c;选择排序&#xff0c;或者直接调用函数。 下面是选择排序&#xff1a; #include <stdio.h> #include <math.h> int main () {int n,i,j,t,a[100],temp;while(scanf("%d",&n)!EOF)…

使用Novell.Directory.Ldap.NETStandard在.NET Core中验证AD域账号

Novell.Directory.Ldap.NETStandard是一个在.NET Core中&#xff0c;既支持Windows平台&#xff0c;又支持Linux平台&#xff0c;进行Windows AD域操作的Nuget包。 首先我们新建一个.NET Core控制台项目&#xff1a;NetCoreLdap&#xff0c;并下载如下Nuget包&#xff1a; Nove…

android AIDL IPC深入分析

深入分析AIDL原理 博客分类&#xff1a; Android 在上一篇文章&#xff08;Service使用方式&#xff09;中&#xff0c;介绍了Android进程间通信&#xff08;IPC&#xff09;的使用&#xff0c;并给出了一个示例。但并没有深入分析aidl是怎样可以做到进程间通信的&#xff0c;…

xml常用操作(js、sql、vb)

我们经常会用到xml操作&#xff0c;如下介绍了js、sql、vb等对xml的操作。 JS创建xml对象 //创建对象 function getDataXML() {var objTds $("TEXTAREA");var count objTds.length;var jsonData;var xmlDoc new ActiveXObject("Microsoft.XMLDOM");//创…

【ACM】杭电OJ 2019

可以用链表写&#xff0c;也可以用顺序表写&#xff1a; 下面是链表的AC代码&#xff1a; #include <stdio.h> #include <stdlib.h> typedef struct node {int info;struct node* next; }N; N* init() {return NULL; } N* creat(N* head,int n) {int i,x;N *p, *…

Nancy in .Net Core学习笔记 - 初识Nancy

原文:Nancy in .Net Core学习笔记 - 初识Nancy前言 去年11月份参加了青岛MVP线下活动&#xff0c;会上老MVP衣明志介绍了Nancy, 一直没有系统的学习一下&#xff0c;最近正好有空&#xff0c;就结合.NET Core学习总结了一下。 注&#xff1a; 本文中大部分内容都是对官网文档的…

rpath和runpath的区别

考虑翻译Qt官方blog中的RPATH and RUNPATH这篇文章&#xff0c;在继续之前&#xff0c;我需要先验证自己的理解是正确的&#xff0c;至少能自圆其说&#xff0c;能说服自己。 用例子说话 二进制 对应源码 有一个程序 a.out main.c 需要加载插件A libA.so liba…

scanf(%s,a)和gets(a)的差别

gets()和scanf()的区别在于输入的字符串是否中间有空格&#xff1a;对于前者&#xff0c;只有遇到"\n"时才停止输入&#xff0c;而对于后者&#xff0c;出现"\n"或空格都停止输入。

阿里注册中心nacos使用整合Dubbo-原创

阿里注册中心nacos是今年开源的框架&#xff0c;一开始以为就是个zk。后面看了图才明白他对标的竟然是consul\eureka&#xff0c;最重要是完美支持dubbo。我想今年开源它也是别有用意 。&#xff08;目前nacos0.7版本&#xff09; Dubbo 融合 Nacos 成为注册中心 Nacos 作为 Du…

UBUNTU adb连接android设备

1sudo vi /etc/udev/rules.d/70-android.rules 2最新修改方法&#xff0c;不用去看设备的ID&#xff0c;直接在rules.d下增加一个文件51-android.rules&#xff0c;内容为&#xff1a; SUBSYSTEM"usb" ENV{DEVTYPE}"usb_device", MODE"0666" …

jetty9请求form表单太小限制

报错&#xff1a;java.lang.IllegalStateException: Form too large: 201975 > 200000解决&#xff1a;vi jetty.xml<Configure id"Server" class"org.eclipse.jetty.server.Server">在Server这行下面增加以下代码<!-- guowang add --><…

【ACM】杭电OJ 2037

题目链接&#xff1a;杭电OJ 2037 先把b[i]进行排序&#xff0c;然后&#xff0c;b[i]与a[i1]进行比较。 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <set> #include <…

第二十章:异步和文件I/O.(十三)

通过该开销&#xff0c;可以开始实际编写应用程序。 TextFileAsyncPage的XAML文件与TextFileTryoutPage相同&#xff0c;但必须将代码隐藏文件设置为使用异步文件I / O方法。 必须在此处捕获文件I / O函数中可能发生的任何异常&#xff0c;这意味着任何可以抛出异常的方法必须与…

shell [] [[ ]] {}区别

一、小括号&#xff0c;圆括号&#xff08;&#xff09; 1、单小括号 () ①命令组。括号中的命令将会新开一个子shell顺序执行&#xff0c;所以括号中的变量不能够被脚本余下的部分使用。括号中多个命令之间用分号隔开&#xff0c;最后一个命令可以没有分号&#xff0c;各命…

【C++】用指针做函数参数

此篇博客程序运行环境为&#xff1a;VS2017&#xff01;&#xff01;&#xff01; 函数的参数不仅可以是整型、浮点型、字符型等数据&#xff0c;还可以是指针类型。 它的作用是将一个变量的的地址传给被调用函数的形参。 e.g. 输入两个数&#xff0c;按由大到小顺序输出 #…

JAVA面向对象-----final关键字

JAVA面向对象—–final关键字 1&#xff1a;定义静态方法求圆的面积 2&#xff1a;定义静态方法求圆的周长 3&#xff1a;发现方法中有重复的代码&#xff0c;就是PI&#xff0c;圆周率。1&#xff1a;如果需要提高计算精度&#xff0c;就需要修改每个方法中圆周率。 4&#xf…