热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

我可以用mysqli_盲目地替换所有mysql_函数吗?-CanIblindlyreplaceallmysql_functionswithmysqli_?

Ihaveusedmysql_query()throughoutmyproject;butIvejustlearnedthatmysql_wasdeprecatedas

I have used mysql_query() throughout my project; but I've just learned that mysql_ was deprecated as of PHP 5.5, has been removed in PHP 7.

我在整个项目中都使用过mysql_query();但我刚刚了解到,自PHP PHP起,mysql_已被弃用,已在PHP 7中删除。

So, I would like to know if I can replace all mysql_ functions with mysqli_ in my project blindly? For example, just replacing mysql_query() with mysqli_query(). Is there any adverse effect?

所以,我想知道我是否可以盲目地用我的项目中的mysqli_替换所有mysql_函数?例如,只需用mysqli_query()替换mysql_query()。有不良影响吗?

3 个解决方案

#1


37  

The short answer is no, the functions are not equivalent.

简短的回答是否定的,功能不相同。

The good news is there is a converter tool that will help you if you've got a lot of calls/projects to change. This will allow your scripts to work right away.

好消息是有一个转换器工具可以帮助你,如果你有很多要改变的电话/项目。这将允许您的脚本立即工作。

https://github.com/philip/MySQLConverterTool

https://github.com/philip/MySQLConverterTool

It's a forked version of the Oracle original version, and it's kosher.

它是Oracle原始版本的分叉版本,它是犹太洁食。

That said, it's not too difficult to update your code, and you might want to migrate to an object orientated methodology anyway ...

也就是说,更新代码并不太难,而且您可能希望迁移到面向对象的方法......

1) The Connection

1)连接

For all intents and purposes, you need a new connection function that saves the connection as a PHP variable, for example;

出于所有意图和目的,您需要一个新的连接函数,例如将连接保存为PHP变量;

$mysqli = new mysqli($host,$username,$password,$database);

Notice I've saved the connection to $mysqli. You can save to $db or whatever you like, but you should use this throughout your code to reference the connection.

注意我已经保存了与$ mysqli的连接。您可以保存到$ db或任何您喜欢的内容,但是您应该在整个代码中使用它来引用连接。

Remember to check for a connection error though;

请记住检查连接错误;

if ($mysqli->connect_errno) echo "Error - Failed to connect to MySQL: " . $mysqli->connect_error;

2) The Query

2)查询

Note: You should protect against SQL injection with prepared statements, which are available in MySQLi. Take a look at How can I prevent SQL injection in PHP?, but I'm just going to cover the basics here.

注意:您应该使用MySQLi中提供的预准备语句来防止SQL注入。看一下如何在PHP中阻止SQL注入?但是我将在这里介绍基础知识。

You now have to include the connection as an argument in your query, and other mysqli_ functions. In procedural code it's the first argument, in OO you write it like a class method;

您现在必须在查询中包含连接作为参数,以及其他mysqli_函数。在程序代码中它是第一个参数,在OO中你把它写成类方法;

Procedural:

程序:

$result = mysqli_query($mysqli,$sql);

OO:

OO:

$result = $mysqli->query($sql);

3) Fetch Result

3)获取结果

The fetching of the result is similar to the old mysql_ function in procedural;

获取结果类似于过程中的旧mysql_函数;

while($row = mysqli_fetch_assoc($result))

but as $result is now an object in mysqli, you can use the object function call;

但是由于$ result现在是mysqli中的一个对象,你可以使用对象函数调用;

while($row = $result->fetch_assoc())

4) Close Connection

4)关闭连接

So as before, you need to include the connection in the close function; as an argument in procedural;

和以前一样,你需要在close函数中包含连接;作为程序论证;

mysqli_close($mysqli);

and as the object that you run the function on in OO;

以及在OO中运行函数的对象;

$mysqli->close();

I would be here forever if I went through them all, but you get the idea. Take a look at the documentation for more information. Don't forget to convert any connection close, result release, or error and row counting functions you have.

如果我完全了解它们,我会永远在这里,但你明白了。请查看文档以获取更多信息。不要忘记转换任何连接关闭,结果释放,或错误和行计数功能。

The basic rule of thumb is for functions that use the database connection, you need to include it in the function now (either as the first argument in procedural, or the object you use to call the function in OO), or for a result set you can just change the function to mysqli_ or use the result set as the object.

基本的经验法则是使用数据库连接的函数,您需要将它包含在函数中(作为过程中的第一个参数,或者用于在OO中调用函数的对象),或者用于结果集您可以将函数更改为mysqli_或将结果集用作对象。

#2


5  

If you cannot convert all calls to the mysqli functions on a old project, you could install and include the library php7-mysql-shim.

如果您无法将所有调用转换为旧项目上的mysqli函数,则可以安装并包含库php7-mysql-shim。

It will try to create a transparent replacement for mysql on PHP 7 using mysqli. Obviously the performance is slower, but it's a solution to get around the problem in a couple of minutes. You may safely include the library in projects working with PHP 5.6 (it will be ignored).

它将尝试使用mysqli在PHP 7上创建一个透明的mysql替代品。显然性能较慢,但它是在几分钟内解决问题的解决方案。您可以安全地将库包含在使用PHP 5.6的项目中(它将被忽略)。

if (defined('PHP_VERSION_ID') && (PHP_VERSION_ID >= 50600)) { require_once "mysql-shim.php"; }

#3


2  

You can't. some of the functions of mysql and mysqli require different parameters. So you should know which will use the same parameters.

你不能。 mysql和mysqli的一些功能需要不同的参数。所以你应该知道哪些将使用相同的参数。


推荐阅读
  • 本文详细介绍了如何在本地环境中安装配置Frida及其服务器组件,以及如何通过Frida进行基本的应用程序动态分析,包括获取应用版本和加载的类信息。 ... [详细]
  • 深入解析轻量级数据库 SQL Server Express LocalDB
    本文详细介绍了 SQL Server Express LocalDB,这是一种轻量级的本地 T-SQL 数据库解决方案,特别适合开发环境使用。文章还探讨了 LocalDB 与其他轻量级数据库的对比,并提供了安装和连接 LocalDB 的步骤。 ... [详细]
  • 本文详细介绍了Oracle RMAN中的增量备份机制,重点解析了差异增量和累积增量备份的概念及其在不同Oracle版本中的实现。通过对比两种备份方式的特点,帮助读者选择合适的备份策略。 ... [详细]
  • Mysqlcheck作为MySQL提供的一个实用工具,主要用于数据库表的维护工作,包括检查、分析、修复及优化等操作。本文将详细介绍如何使用Mysqlcheck工具,并提供一些实践建议。 ... [详细]
  • 构建Python自助式数据查询系统
    在现代数据密集型环境中,业务团队频繁需要从数据库中提取特定信息。为了提高效率并减少IT部门的工作负担,本文探讨了一种利用Python语言实现的自助数据查询工具的设计与实现。 ... [详细]
  • 在Android应用开发中,当在MenuItem中通过app:actionLayout属性使用Switch控件时,可能会遇到空指针异常的问题。本文将探讨该问题的原因及解决方案。 ... [详细]
  • A1166 峰会区域安排问题(25分)PAT甲级 C++满分解析【图论】
    峰会是指国家元首或政府首脑之间的会议。合理安排峰会的休息区是一项复杂的工作,理想的情况是邀请的每位领导人都是彼此的直接朋友。 ... [详细]
  • 深入解析JavaScript中的this关键字
    本文详细探讨了JavaScript中this关键字的具体指向及其在不同场景下的应用,通过实例和图表帮助读者更好地理解和掌握这一核心概念。 ... [详细]
  • 2022年4月15日的算法练习题,包括最长公共子序列和线段树的应用。 ... [详细]
  • 尤洋:夸父AI系统——大规模并行训练的深度学习解决方案
    自从AlexNet等模型在计算机视觉领域取得突破以来,深度学习技术迅速发展。近年来,随着BERT等大型模型的广泛应用,AI模型的规模持续扩大,对硬件提出了更高的要求。本文介绍了新加坡国立大学尤洋教授团队开发的夸父AI系统,旨在解决大规模模型训练中的并行计算挑战。 ... [详细]
  • 本文介绍了两个重要的Node.js库——cache-content-type和mime-types,它们在处理HTTP响应头时非常有用。cache-content-type是基于mime-types构建的,并且实现了缓存机制以提高性能。 ... [详细]
  • 本文介绍了进程的基本概念及其在操作系统中的重要性,探讨了进程与程序的区别,以及如何通过多进程实现并发和并行。文章还详细讲解了Python中的multiprocessing模块,包括Process类的使用方法、进程间的同步与异步调用、阻塞与非阻塞操作,并通过实例演示了进程池的应用。 ... [详细]
  • 利用Python在DragonBoard 410c上解析GPS数据获取位置信息
    本文介绍了如何在DragonBoard 410c开发板上使用Python脚本来解析GPS报文,从而获取精确的位置信息。DragonBoard 410c集成了GPS、Wi-Fi和高性能GPU,非常适合用于各种物联网项目。 ... [详细]
  • 本文探讨了Linux/Unix文件系统中两种主要的权限控制方式:传统的UGO(User/Group/Others)和更为精细的ACL(Access Control List)。ACL提供了一种更灵活的权限管理方法,适用于需要对文件系统进行细粒度控制的场景。 ... [详细]
  • 使用IntelliJ IDEA高效开发与运行Shell脚本
    本文介绍了如何利用IntelliJ IDEA中的BashSupport插件来增强Shell脚本的开发体验,包括插件的安装、配置以及脚本的运行方法。 ... [详细]
author-avatar
放开丶那手
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有