PHP 准备语句转义的清晰性

2024-05-08

我知道这是一个非常受欢迎的问题,并且已经研究了很多小时,我仍然对明确的答案有点不确定。我不是 PHP 专业人士,并且已经自学了一段时间。我最近刚刚了解 MYSQLi 准备好的语句(已经习惯了旧的做法)。

我的主要问题是试图找到关于在使用准备好的语句时使用真正的转义字符串(或任何其他安全性)的要求的明确答案。

我已经准备好通过以下问题:

准备好的语句,转义变量 https://stackoverflow.com/questions/17354412/prepared-statements-escape-variables

如果我使用 mysqli 准备好的语句我需要转义吗 https://stackoverflow.com/questions/24716560/if-i-use-mysqli-prepared-statements-do-i-need-to-escape

PHP PDO 准备好的语句需要转义吗? https://stackoverflow.com/questions/3143614/do-php-pdo-prepared-statments-need-to-be-escaped

但在使用准备好的语句时似乎存在支持和反对转义数据的争论。还有很多关于 PDO 的提及,这对我来说非常令人困惑,因为我不是 PHP 天才。

我期待这个伟大的社区帮助我完全理解并给我一个答案(以我希望理解的方式),以便我取得进步。

为此,我有以下示例,并询问是否有人可以用通俗易懂的术语解释使用哪些,不使用哪些,更重要的是,为什么?

我目前在我的代码中使用它:

$id = $conn->real_escape_string($_POST['id']);
$name = $conn->real_escape_string($_POST['name']);
$message = $conn->real_escape_string($_POST['message']);

$qry = $conn->prepare('INSERT INTO status (id, name, message, date) VALUES (?, ?, ?, NOW())');
$qry->bind_param('iss', $id, $name, $message);
$qry->execute();
$qry->close();

但是,我对上述示例问题的有限理解告诉我,使用以下代码是安全/可以的:

$qry = $conn->prepare('INSERT INTO status (id, name, message, date) VALUES (?, ?, ?, NOW())');
$qry->bind_param('iss', $_POST['id'], $_POST['name'], $_POST['message']);
$qry->execute();
$qry->close();

那么,哪种方法是最好的方法呢?抱歉问了这么长的问题。在研究并试图理解它之后,我只想确定并理解其原因。

感谢大家的时间和支持,我将非常感谢所提供的任何帮助。


注意:这个答案使用了一个过于简单化的模型来说明转义和准备好的语句的实际作用。

SQL 是一种语言。其中有些字符具有特殊含义。例如'分隔字符串的开头和结尾。

当您转义数据时,您将\前面有特殊含义的字符。这导致它们的意思是(例如)“撇号”而不是“字符串的结尾”。

So:

$id = $conn->real_escape_string($_POST['id']);

所以现在,如果有一个'在 ID 中,它不会破坏 SQL。

当您使用绑定变量时,它将自动为您转义。

$qry->bind_param('iss', $id, $name, $message);

所以现在,如果有一个'在 ID 中,它不会破坏 SQL。

……除非你已经这么做了。

所以现在你有了'转换成\'然后进入\\\'因为'被逃脱,然后又随着\从第一次逃跑开始。

所以现在第一个\已被视为数据(而不是特殊的 SQL 字符)并插入到数据库中。

使用准备好的语句。使用only准备好的陈述。

(例外情况是,当您使用准备好的语句无法使用的变量进行操作时,例如动态表名称,这种情况不应太频繁)。

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

PHP 准备语句转义的清晰性 的相关文章

  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 如何仅删除页面的自动段落格式,而不删除帖子的自动段落格式(WordPress)

    我已经熟悉这个在 WordPress 中删除自动段落格式的小技巧 remove filter the content wpautop remove filter the excerpt wpautop 但是添加这个函数 php删除整个网站的
  • 使用 phpdocx 下载损坏的 .docx

    我有一个项目 我们使用 phpdocx pro 在模板中生成 docx 文件 我可以很容易地将数据输入到模板中 但是当下载文件并在 MS Word 2010 中打开时 程序报告无法打开文件 因为内容存在问题 详细信息是 文件已损坏 并且无法
  • 在 Laravel 中的编辑表单上获取选定选项

    我的网站订单有一个可编辑的表单 并且有以下字段 User quantity note status 我在此表单中还有其他选项 但只有这些字段对我来说很重要 以便能够获取默认值 例如 我希望能够查看用户默认订购的数量 然后我可以更改它或保留它
  • PHP - 警告:strpos() [function.strpos]: 空分隔符是什么意思?

    警告 strpos function strpos 空分隔符是什么意思 我有这个 if strpos 039 text false text str replace 039 text 猜测一下 我会说 text是一个空字符串 感谢马克指出细
  • Facebook iFrame 应用程序 - 摆脱垂直滚动条?

    我已经转换了一个 Facebook 应用程序 http apps facebook com video preferans 从 FBML 到 iFrame 使用 PHP SDK 现在显示的垂直滚动条与我之前显示的内容数量相同 一个徽标 一个
  • PHP 的脚手架 [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 PHP 中有什么东西可以像 Rails 一样创建基本的脚手架吗 编辑 我需要一些东西来快速原型化 一些框架比如Symfony http www sym
  • Laravel 从 API 响应中删除标头值

    Laravel 应用程序版本 5 6 我希望从 API 响应中显示的 Cache Control 标头中删除 private 值 我有一个中间件添加 无缓存 和 无存储 值 response next request response gt
  • 从 php 到 JavaScript 的数组

    我正在尝试使用 json 将数组列表从 php 传输到 javascript 但它不起作用 JS ajax url getProfilePhotos php type post post or get method data if you
  • 将IP保存到数据库中

    当用户登录时 我想将他们的 IP 保存在数据库中 我该怎么做呢 MySQL 字段最适合使用哪种类型 获取IP的PHP代码是什么样的 我正在考虑将其用作登录 会话内容的额外安全功能 我正在考虑使用用户现在拥有的 IP 检查用户从数据库登录的
  • 带 url 参数的 Laravel post 路由

    我面临着幼虫路由的大墙 我似乎找不到解决方案 我在视图模板中有此表单
  • 如何在同一 PHP 页面上多次使用 mysqli fetch_assoc() 和准备好的语句?

    有没有办法启用fetch assoc 在同一页上多次使用准备好的语句 data conn gt prepare SELECT FROM some table WHERE id data gt bind param i id data gt
  • PHP 脚本不断执行 mmap/munmap

    我的 PHP 脚本包含一个循环 它只不过是回显和取消引用指针 如 tab othertab i gt 中的内容 直到昨天 这个脚本开始变得非常慢 比以前慢了 50 倍 之前 它一直运行良好 使用 strace 后 我发现 90 的情况下 脚
  • php oracle客户端oci8安装出现什么问题

    我尝试了安装 PHP Oracle 客户端的所有过程 1 我安装了客户端版本8和32位 2 我在php ini中取消了oci的注释 3 重新启动Wamp 4 不确定是否真的安装 但我在 php ini 中得到了引用 5 但仍然无法连接 泰汉
  • ACL授权失败后ZF3重定向

    我有一个带有 ACL 的新 ZF3 应用程序 现在 我需要在未经授权的访问的情况下重定向到错误页面 例如 403 我认为最好的方法是触发一个事件 然后捕获它 但我失败了 全部都在我的用户模块中Module php 摘录 namespace
  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • 点击 %40 变为 %2540

    当单击包含 符号的链接时 该网址给我 40 这就是我想要的 但是一旦我点击它 一秒钟后它就在我点击后变成了 2540 单击是在电子邮件内 然后定向到网站 其中 40 更改为 2540 我怎样才能让它停止变化 它现在得到这样的参数 email
  • 使用 ImageMagick (PHP) 将 2 个图像并排合并为 1 个图像

    我认为这是一件容易的事 我有 2 张图片 JPG 我希望它们合并成一张图片 其中 2 张图片并排 所以我有图片 A 和图片 B 我想要图片 AB 并排 两个图像具有相同的宽度和高度 在本例中 宽度 200px 高度 300px 但是第二个图
  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • PHP条件,如果当前页面,则链接突出显示[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有一个带

随机推荐

  • Razor 视图的有界属性在发布后未更新

    我无法在下面的示例剃刀视图中获取属性价格以进行更新OnPostOrder 执行 我编写此示例视图是为了执行以下操作 在更改产品选择列表时 使用 jquery 提交 ProductFormsubmit Use asp page handler
  • 如何使用 Python 'in' 运算符检查我的列表/元组是否包含每个整数 0、1、2?

    我如何使用Pythonin运算符检查我的列表 元组sltn包含整数 0 1 和 2 我尝试了以下方法 为什么它们都错了 Approach 1 if 0 1 2 in sltn kwd1 True Approach 2 if any item
  • 图钉的 OnClickListener

    在这里我使用了谷歌地图和叠加层 我使用了图钉图像来指向 GeoPoint 我想设置一个OnClickListener图钉事件 当用户触摸 pin 时 我想吐槽一条消息 下面是代码 import java util List import c
  • 二叉堆对于优先级队列的优点?

    看来我错过了一些非常简单的东西 优先级队列的二进制堆与快速排序的值数组相比有什么优势 在这两种情况下 我们将值保存在数组中 插入的时间复杂度为 O logN 删除最大的时间复杂度为 O 1 在这两种情况下 给定元素数组的初始构造都是 O N
  • 无法使用include_graphics在Rmarkdown中插入png(错误:文件不是PNG格式)

    这个错误很奇怪 当我编织文档时 出现以下错误 Quitting from lines 42 43 sigminer doc Rmd Error in png readPNG path native TRUE info TRUE file i
  • INET6_ATON 的替代 MySQL 代码

    将旧的 INET ATON 值转换为新的二进制 INET6 ATON 值 无需 INET6 ATON INET6 NTOA 我们在表中已有数据 字段类型为UNSIGNED INT其中保存了使用以下命令创建的 IPv4 数据INET ATON
  • ERROR 188 (HY000): FTS 查询超出结果缓存限制 mysql

    我的表的文本列上有全文索引 约有 1100 万行 表结构 CREATE TABLE review id int 11 NOT NULL AUTO INCREMENT comments text COLLATE utf8mb4 unicode
  • 多个 Nodejs 应用程序的单点登录

    我们有 3 个 Nodejs Web 应用程序 在具有多个子域的同一 vps 上的同一域名上运行 并为每个应用程序实现护照身份验证 我们希望单个用户能够使用单个帐户访问所有应用程序 因此我们仅出于帐户管理的目的添加了accounts exa
  • 如何在 Django 管理 UI 的文本区域中保留空行?

    我在一个对象上有一个字段 我使用 Django 3 2 管理 UI 中的文本区域来渲染它这段代码 https stackoverflow com a 431412 就像是 class MyObject models Model some t
  • IPV6 Curl POST 请求

    在 IPV6 中 如何使用 IPV6 地址和端口号构建 CURL POST http 请求 任何类型的线程都将受到赞赏 尝试构建如下请求 gt curl interface http 2001 0 db8 1111 0 0 0 11 809
  • 为什么 UIScrollView 在顶部留有空间并且不滚动到底部

    我是 Objective C 编程新手 我正在使用 UIScrollView 及其上的一些标签 图像和文本视图 我已关闭自动布局 并已尝试打开 调整滚动视图插图 标题中描述的情况 和关闭 不滚动 这是我插入 viewDidLoad 的内容
  • Play 框架 2.0:在 Http.Context 中存储值

    我正在尝试在 Play 框架中的 scalaquery 中实现 基于请求 的会话 我使用 scalaquery 创建一个会话 并尝试将其存储在当前的 http 上下文中 如下所示 def withTransaction A bp BodyP
  • 如何将“重要”添加到 zIndex

    我网站上的某些附加组件之间存在冲突 使用 Firebug 我注意到如果我将 important 添加到 z 索引 我可以避免冲突 但 z index 值是使用 JavaScript 设置的 而不是 CSS 那么如何在以下 JS 代码中添加
  • C# 编译器如何删除发布版本中的 Debug.Assert?

    我最近正在浏览一些代码 并考虑是否需要小心放置在其中的表达式Debug Assert语句 例如昂贵的操作或具有副作用的操作 然而 编译器似乎非常聪明地完全删除了Assert陈述和内在表达 例如 以下内容只会在调试版本上打印 static v
  • 如何在 Silverstripe CMS 中使用 JavaScript?

    我正在使用 SilverStripe 3 0 CMS 并且我需要将 Google 地图包含到 CMS 中 我正在跟进这一步 http www silverstripe org general questions show 14596 pos
  • 有没有一种方法可以通过对一列求和并基于另一列来提取数据

    我正在尝试按帐户按月汇总金额 并将结果按帐户显示在另一个单元格中 AND E1 gt MONTH E1 E8 SUMPRODUCT F 1 F 8 gt MONTH E1 E8 6 D 1 F 8 D1 gt 0 6 Account Amo
  • 在python中访问超级(父)类变量

    我是Python新手 我尝试使用 super 方法访问子类中的父类变量 但它抛出错误 无参数 使用类名访问类变量是可行的 但我想知道是否可以使用 super 方法访问它们 class Parent object props a str a
  • 如何在 EF Core 3 中启用日志记录?

    我正在使用 Entity Framework Core 3 Preview 5 和 ASP NET Core 3 Preview 5 在 Visual Studio 2019 的调试输出窗口中 我没有从 EF Core 获取任何日志 我阅读
  • Azure DevOps/VSTS Build - 在 BUILD BUILDNUMBER 中找不到版本号数据

    设置一个简单的类库来构建并发布到 VSTS 自己的源时 我在 NuGet 包运行时看到此错误 在 BUILD BUILDNUMBER 中找不到版本号数据 我勾选了 使用版本号来版本包 选项 预计 VSTS 能够正常工作 使用内部版本号来版本
  • PHP 准备语句转义的清晰性

    我知道这是一个非常受欢迎的问题 并且已经研究了很多小时 我仍然对明确的答案有点不确定 我不是 PHP 专业人士 并且已经自学了一段时间 我最近刚刚了解 MYSQLi 准备好的语句 已经习惯了旧的做法 我的主要问题是试图找到关于在使用准备好的