将大型网站从 MySQL 切换到 MySQLi [重复]

2024-02-09

我想从 MySQL 切换到 MySQLi,但我有一个非常大的网站。

我读到了https://wikis.oracle.com/display/mysql/Converting+to+MySQLi https://wikis.oracle.com/display/mysql/Converting+to+MySQLi可以帮助我,我读了我怎样才能将这个 mysql 更改为 mysqli ? https://stackoverflow.com/questions/1390607/how-could-i-change-this-mysql-to-mysqli。它说我只需在函数中添加一个“i”就可以替换大部分函数,​​并且我应该开始寻找错误。

但我的网站非常复杂且庞大,需要很长时间才能检查一切是否正常。那么:对于一个非常大的网站,从 MySQL 切换到 MySQLi 的最佳方法是什么?

Thanks!


您的问题没有简单的答案,因为几乎所有简单的方法都涉及在编写应用程序时以不同的方式执行操作。

如果您在整个代码中直接调用 mysql_* 函数,并且没有通过帮助器类或函数执行查询的数据库抽象层,那么您将需要编辑每个命令。

您不能像程序上那样在 mysql_query 之类的命令中添加 imysqli_query()要求第一个参数是数据库的链接,其中mysql_query()如果确实给出了连接,那么它就是第二个参数。

我建议现在是放置数据库抽象层的最佳时机,而不是仅仅将 mysql_query(...) 更改为 mysqli_query($link,.....) 。因此,请使用实际处理查询的函数,例如 sql_query() ,这样将来如果您需要再次更改数据库,您只需更新一个抽象文件中的数据库特定命令即可。这样,如果您编写一个包装 mysqli_query 的函数,那么您可以简单地将 mysql_query() 重命名为辅助函数,并让辅助函数负责将链接放在那里。

虽然这是最简单的方法,但它不会绑定参数或准备语句,这是防止sql注入漏洞的主要因素

更改所有这些命令后,您需要进行测试。

如果您没有编写自动化测试,那么现在可能是开始编写它们的好时机。尽管您需要检查每个更改是否有效,但如果您通过自动化测试来完成,那么您可以避免将来的痛苦。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将大型网站从 MySQL 切换到 MySQLi [重复] 的相关文章

  • 这个巨大的正则表达式是如何工作的?

    我最近在我的一个目录中的一个名为的文件中找到了下面的代码doc php 文件功能或链接到文件管理器 做得非常好 基本上 它列出了当前目录中的所有文件 并且允许您更改目录 它可以访问我的所有文件 添加 重命名 信息 删除 我不记得安装过它 我
  • Laravel - 急切加载 Eloquent 模型的方法(而不是关系)

    就像我们可以急切加载 Eloquent 模型的关系一样 有没有办法急切加载不是 Eloquent 模型的关系方法的方法 例如 我有一个 Eloquent 模型GradeReport它有以下方法 public function totalSc
  • 如何从脚本中创建新的 Joomla 用户帐户?

    我们正在为 Joomla 创建一个 XML API 允许合作伙伴网站在我们的网站上为其用户创建新帐户 我们已经创建了一个独立的 PHP 脚本来处理和验证 API 请求 但现在我们需要实际创建新帐户 我们最初只想进行 CURL 调用来提交注册
  • 检查字符串是否是哈希值

    我正在使用 SHA 512 来散列我的密码 当然还有盐 我认为我想要的不可能 但无论如何我们还是要问一下 有没有办法检查字符串是否已经是 SHA 512 或其他算法 哈希值 当用户登录时 我想检查他的密码 如果它仍然是纯文本 则应将其转换为
  • Cakedc.users => 总是重定向到主页

    我在新的 Cakephp 安装上使用插件 CakeDC Users 我有两个控制器 PagesController php CardsController php Pages 有 1 个操作 Beta 它是主页 Cards 有两个操作 索引
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • Laravel/00webhost 错误 404。在此服务器上找不到请求的 URL

    1 将我的文件上传到 000webhost 我将公用文件夹中的所有文件放置到公共 html然后我创建了一个名为laravel我在那里上传了所有其他文件 这是我的目录结构 laravel app 引导程序 config 公共 html 索引
  • MySql 视图脚本中的注释

    可以这样做吗 我尝试过多个 gui mysql workbench navicat toad for mysql 但没有一个保存这样的注释 something important select something else importan
  • 带 url 参数的 Laravel post 路由

    我面临着幼虫路由的大墙 我似乎找不到解决方案 我在视图模板中有此表单
  • 如何在CentOS 5.3上安装php-mongodb?

    我已经在我的 VPS 上安装了 mongoDB 效果很好 现在我想安装 php 驱动程序以使 php 与 mongoDB 一起工作 我跟着蒙戈安装 http www php net manual en mongo installation
  • 付款成功后保存到数据库(paypal)

    我试图找出在客户使用 paypal 支付商品费用后将数据 之前以表单提交 保存到数据库的最佳方法 沿着这个过程的一些事情 1 在实际网站上填写表格 gt 2 登录 Paypal gt 3 立即付款 PayPal gt 4 数据已插入数据库
  • 如何从表中检索特定列 --- JPA 或 CrudRepository?我只想从用户表中检索电子邮件列

    用户模型 Entity Table name user uniqueConstraints UniqueConstraint columnNames email public class User implements Serializab
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • 合并 2 个数组并合并数字键的结果

    我有 2 个数组 我希望通过每个数字键将其中合并 分组在一起 例如 Array1 2009 gt 131 2008 gt 940 2007 gt 176 2006 gt 1 Array2 2008 gt 9 2007 gt 3 我希望输出是
  • 使(文本到图像)图像具有一定的宽度但无限的长度?

    我有下面的代码 可以用大量文本生成图像 我希望该图像的宽度为 700 像素 我还希望它保留字符串所具有的段落结构 该字符串来自 MySQL 数据库 我怎样才能实现这一点 font 2 width imagefontwidth font st
  • 扩展构建器中的“映射到现有表”显示 TYPO3 中的奇怪问题

    在我的扩展中MyExt 我映射了模型Page to pagesTYPO3 中的表 首先它向我展示了type mismatch错误 无论如何我继续保存它 会发生以下情况 我的页面树变成这样 我的新记录表单仅显示 UID 而不显示标题 My P
  • ACL授权失败后ZF3重定向

    我有一个带有 ACL 的新 ZF3 应用程序 现在 我需要在未经授权的访问的情况下重定向到错误页面 例如 403 我认为最好的方法是触发一个事件 然后捕获它 但我失败了 全部都在我的用户模块中Module php 摘录 namespace
  • PHP LDAP 查询获取特定安全组的成员

    我正在努力让 LDAP 查询工作来为我提供安全组的成员 我们的活动目录结构设置为 DC domain DC co dc uk然后 我们有一个名为 公司用户 的 OU 其中有一个用于 IT 和标准的 OU 在这些中我们创建了用户 所以我被设置
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • rake db 问题:迁移 -

    我无法为 Ruby on Rails 设置 MySQL 数据库 设置数据库并确保 config database yml 文件匹配后 我遇到了以下错误消息 U Rails alpha gt rake db migrate trace in

随机推荐

  • 通过 MSBuild 构建 Visual Studio 2015 C++ 项目 (v140) 失败 - 找不到 v140

    我并排安装了 Visual Studio 2013 和 2015 我刚刚将组合解决方案 C C C CLI 升级到 2015 并将 Platform Toolset 设置为 v140 Visual Studio 中的构建工作正常 但无法从
  • 查询 XML 而忽略名称空间?

    我试图在忽略命名空间的同时查询 XML 因为结果集有多个命名空间 我已经到达 DataSets 节点 但我不知道如何获取多个 DataSourceName CommandType CommandText 理想情况下我想要 DataSetNa
  • 通过OData读取数据:如何通过curl/RCurl指定身份验证方案?

    我想通过 HTTPS 读取一些数据OData http www odata org 连接和数据源需要Basic认证方案 我很熟悉平常的curl http curl haxx se RCurl http cran r project org
  • 无法使用项目列表(数组)读取自定义事实

    我创建了自定义事实 gt etc ansible facts d hdfs fact 当我使用以下命令运行剧本时 debug var ansible local hdfs run once true 我如预期得到以下答案 PLAY all
  • 管理 Google 地图 API 密钥

    我的应用程序使用大量 MapView 屏幕 我正在尝试找出如何管理调试环境和生产环境之间的 API 密钥 显然 无法更改 Eclipse 中的调试应用程序密钥 因此我必须在该环境中使用调试映射 API 密钥 相反 如果没有生产应用程序密钥
  • AS3 处理任意大文件

    我正在尝试读取 AS3 中的一个非常大的文件 但我遇到了运行时崩溃的问题 我目前正在使用文件流 http help adobe com en US Flex 4 0 langref flash filesystem FileStream h
  • NHibernate.LazyInitializationException

    我们一直偶尔会出现这个问题 但现在我每次都可以重现它 我正在增加自定义论坛上的查看计数器 这会导致错误 NHibernate LazyInitializationException 未能延迟初始化集合 没有会话或会话被关闭 此错误发生在对象
  • 从 virtualenv 中启动 wsgi 应用程序作为 Linux 系统服务

    我目前正在 virtualenv 中开发一个 Bottle 应用程序 我打算使用 bjoern WSGI 服务器来提供它 但这可能并不重要 我还打算使用 lighty 或 nginx 反向代理来为应用程序提供服务 无论如何 应用程序可以作为
  • ECS任务如何知道在哪个区域运行?

    我有一个在 ECS 启动的任务中使用 boto3 的 python 应用程序 在 docker 容器中 我使用的 boto3 命令需要一个区域才能正常工作 但我只知道运行时的区域 多区域应用程序 当时的想法是定义AWS DEFAULT RE
  • 在 if 条件下改变字符串变量

    我使用这个程序将输入 mm 作为一年中的月份并打印出月份的名称 include
  • 如何根据 UIAlertController 中的 UITextField 禁用 UIAlertAction?

    我正在使用一个UIAlertController向用户呈现一个对话框以输入5 位 CRN 我想要Add按钮将被禁用 直到字段中有五位且仅有五位数字 UITextField 用户界面如下所示 以下是为以下内容设置的属性UIAlertContr
  • 如何从 docker 镜像中删除 ENV 设置

    我有一个设置 HOME 和 PATH 的 docker 映像 config HOME 我知道我可以替换它 但是是否可以删除它 并使用正常的 bash 配置文件设置 我不想通过破解 shell 配置文件来覆盖它 我无法让 creack 的答案
  • Java 6正则表达式一组的多个匹配

    这是简单的模式 key value1 value2 value3 valueN 我想得到 key 值数组 这是我的正则表达式 这是我的文字 foo a b c d Matcher给了我 2 组 foo 作为键 和d 作为值 如果我使用 代替
  • Java 硬件中断处理

    我想知道当硬件中断发生时是否可以自动调用Java方法 可能还有其他选择 我正在做类似的事情 在一个应用程序中 我监视 4 只鼠标的点击情况 这些点击会产生中断 但我很高兴不直接从 Java 处理它们 在Linux下 原来有设备文件 dev
  • 检查角度 2 中是否存在路线

    我想检查角度项目中是否存在路线 例如用户类型http localhost 4200 timestamp在网址栏中和timestamp项目中不存在 如何在不重定向的情况下进行检查 Sajeetharan 的回答涉及router config是
  • 如果命令在 mac 终端内运行,如何让 shell_exec 表现得像命令一样?

    当我在 php 脚本中运行命令时 echo shell exec which php 我得到以下输出 usr bin php 但是 当在 mac 终端中运行相同的命令时 which php 我得到以下输出 php aliased to Ap
  • Django 管理命令导入错误

    我在导入模块时遇到问题qsl management commands
  • SQL Server 中符号 @@ 的含义

    符号的含义是什么 在 SQL Server 中 在 SQL Server 中 符号 是全局变量的前缀 服务器维护所有全局变量 我们不能宣布它们
  • 了解模板方法模式

    据我了解 模板方法只不过是调用子类中定义的虚拟或抽象方法的普通方法 我是对的吗 还是我错过了关于这种模式的其他重要内容 abstract class Foo public void IamTemplateMethod which will
  • 将大型网站从 MySQL 切换到 MySQLi [重复]

    这个问题在这里已经有答案了 我想从 MySQL 切换到 MySQLi 但我有一个非常大的网站 我读到了https wikis oracle com display mysql Converting to MySQLi https wikis