草庐IT

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

coder 2023-06-10 原文

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

那么,我想知道我是否可以将项目中的所有mysql_函数都替换为mysqli_?例如,只需将 mysql_query() 替换为 mysqli_query()。有没有什么不良影响?

最佳答案

简短的回答是,功能不等价。

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

https://github.com/philip/MySQLConverterTool

它是 Oracle 原始版本的 fork 版本,并且符合犹太教规。

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

1) 连接

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

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

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

记得开启连接前开启mysqli报错功能;

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

2) 查询

注意:您应该使用 MySQLi 中提供的准备好的语句来防止 SQL 注入(inject)。看看How can I prevent SQL injection in PHP? ,但我只是在这里介绍基础知识。

您现在必须在查询和其他 mysqli_ 函数中包含连接作为参数。在过程代码中它是第一个参数,在 OO 中你可以像类方法一样编写它。

程序:

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

OO:

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

3) 获取结果

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

while ($row = mysqli_fetch_assoc($result))

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

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

4) 关闭连接

所以和之前一样,你需要在关闭函数中包含连接;作为程序中的论据;

mysqli_close($mysqli);

并且作为您在 OO 中运行函数的对象;

$mysqli->close();

如果我经历了所有这些,我会永远在这里,但你明白了。看看the documentation了解更多信息。不要忘记转换您拥有的任何连接关闭、结果释放或错误和行计数功能。

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

关于php - 我可以盲目地用mysqli_替换所有mysql_函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26476162/

有关php - 我可以盲目地用mysqli_替换所有mysql_函数吗?的更多相关文章

  1. ruby - 为什么我可以在 Ruby 中使用 Object#send 访问私有(private)/ protected 方法? - 2

    类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc

  2. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  3. ruby - 使用 Vim Rails,您可以创建一个新的迁移文件并一次性打开它吗? - 2

    使用带有Rails插件的vim,您可以创建一个迁移文件,然后一次性打开该文件吗?textmate也可以这样吗? 最佳答案 你可以使用rails.vim然后做类似的事情::Rgeneratemigratonadd_foo_to_bar插件将打开迁移生成的文件,这正是您想要的。我不能代表textmate。 关于ruby-使用VimRails,您可以创建一个新的迁移文件并一次性打开它吗?,我们在StackOverflow上找到一个类似的问题: https://sta

  4. ruby - 我可以使用 Ruby 从 CSV 中删除列吗? - 2

    查看Ruby的CSV库的文档,我非常确定这是可能且简单的。我只需要使用Ruby删除CSV文件的前三列,但我没有成功运行它。 最佳答案 csv_table=CSV.read(file_path_in,:headers=>true)csv_table.delete("header_name")csv_table.to_csv#=>ThenewCSVinstringformat检查CSV::Table文档:http://ruby-doc.org/stdlib-1.9.2/libdoc/csv/rdoc/CSV/Table.html

  5. ruby 正则表达式 - 如何替换字符串中匹配项的第 n 个实例 - 2

    在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg

  6. ruby - 在没有 sass 引擎的情况下使用 sass 颜色函数 - 2

    我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re

  7. ruby - 我可以使用 aws-sdk-ruby 在 AWS S3 上使用事务性文件删除/上传吗? - 2

    我发现ActiveRecord::Base.transaction在复杂方法中非常有效。我想知道是否可以在如下事务中从AWSS3上传/删除文件:S3Object.transactiondo#writeintofiles#raiseanexceptionend引发异常后,每个操作都应在S3上回滚。S3Object这可能吗?? 最佳答案 虽然S3API具有批量删除功能,但它不支持事务,因为每个删除操作都可以独立于其他操作成功/失败。该API不提供任何批量上传功能(通过PUT或POST),因此每个上传操作都是通过一个独立的API调用完成的

  8. ruby-on-rails - 跳过状态机方法的所有验证 - 2

    当我的预订模型通过rake任务在状态机上转换时,我试图找出如何跳过对ActiveRecord对象的特定实例的验证。我想在reservation.close时跳过所有验证!叫做。希望调用reservation.close!(:validate=>false)之类的东西。仅供引用,我们正在使用https://github.com/pluginaweek/state_machine用于状态机。这是我的预订模型的示例。classReservation["requested","negotiating","approved"])}state_machine:initial=>'requested

  9. ruby - Nokogiri 剥离所有属性 - 2

    我有这个html标记:我想得到这个:我如何使用Nokogiri做到这一点? 最佳答案 require'nokogiri'doc=Nokogiri::HTML('')您可以通过xpath删除所有属性:doc.xpath('//@*').remove或者,如果您需要做一些更复杂的事情,有时使用以下方法遍历所有元素会更容易:doc.traversedo|node|node.keys.eachdo|attribute|node.deleteattributeendend 关于ruby-Nokog

  10. ruby-on-rails - 在 ruby​​ 中使用 gsub 函数替换单词 - 2

    我正在尝试用ruby​​中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了

随机推荐