准备好的语句,转义变量

2024-06-28

我是否需要采取任何措施来保护这三个变量,例如使用转义字符串或绑定它们?我不确定我是否正确地执行了此操作,人们只是建议使用准备好的语句,所以我正在尝试弄清楚它们。

$order = $_POST['order'];
$heading = $_POST['heading'];
$content = $_POST['content'];    
try {
$dbh = new PDO("mysql:host=$hostname;dbname=saintfiv_faq", $username, $password);
/*** echo a message saying we have connected ***/
echo 'Connected to database<br />';

/*** INSERT data ***/
$stmt = $dbh->prepare("INSERT INTO faq(`order`, `heading`, `content`) VALUES (:order, :heading, :content)");
$stmt->bindParam(':order', $order, PDO::PARAM_INT);
$stmt->bindParam(':heading', $heading, PDO::PARAM_STR, strlen($heading));
$stmt->bindParam(':content', $content, PDO::PARAM_STR, strlen($content));
/*** close the database connection ***/
$stmt->execute();
}
catch(PDOException $e)
{
echo $e->getMessage();
}

您没有在代码中使用准备好的语句。准备好的语句看起来更像是这样:

$stmt = $db->prepare("INSERT INTO foo (bar, baz) VALUES (?, ?);");

$stmt->bindValue(1, "Fez");
$stmt->bindValue(2, "Hat");
$stmt->execute();

您的示例代码可能容易受到 SQL 注入的攻击,因为您只是将变量直接插入到 SQL 字符串中。您将需要使用准备好的语句并绑定值(这是首选解决方案),或者只是确保将所有输入转义为exec()正确。

还值得一提的是exec()对于完全硬编码的语句来说很好 - 例如,$db->exec("SELECT foo FROM bar;");- 由于 SQL 是硬编码的,因此不存在 SQL 注入的可能性。然而我喜欢always use prepare相反,作为一种风格问题。

要在代码中专门执行查询,您可以执行以下操作:

$stmt = $db->prepare("INSERT INTO faq (`order`, `heading`, `content`) " .
    "VALUES (?, ?, ?);");

$stmt->bindValue(1, $order);
$stmt->bindValue(2, $heading);
$stmt->bindValue(3, $content);
$stmt->execute();

我还推荐官方 PHP 文档,因为它展示了做同样事情的一些其他方法(即,您可以将参数作为数组传递给execute()而不是单独绑定它们):http://php.net/manual/en/pdo.prepare.php http://php.net/manual/en/pdo.prepare.php.

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

准备好的语句,转义变量 的相关文章

  • 使用 \PDO::ATTR_EMULATE_PREPARES => true 时出现 Laravel 数据不匹配错误

    我们在 Php Laravel 中构建了应用程序 对于数据库我们使用 postgres sql 此外 在 postgres 之上 我们还配置了 pgBouncer 通过管理可供任何应用程序使用的空闲连接池来限制服务器端的最大连接数 现在 我
  • 可能的 PDOException 错误(MySQL 5)?

    因此 我正在为我的网络应用程序设置一个安装程序 并具有数据库凭据的输入字段 我的验证过程的一部分包括测试数据库连接 使用 PHP 的 PDO 库 如果连接失败 我希望能够区分错误的密码 错误的地址 不存在的数据库名称等 以便我可以引用表单上
  • PHP/PDO/MySQL:插入 MEDIUMBLOB 会存储错误数据

    我有一个简单的 PHP Web 应用程序 它通过文件上传接受图标图像并将它们存储在 MEDIUMBLOB 列中 在我的机器 Windows 和两台 Linux 服务器上 这工作得很好 在第三台 Linux 服务器上 插入的图像已损坏 在 S
  • 如何通过 PDO 使用密码哈希来使我的代码更安全? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我的代码实际上可以工作 但它一点也不安全 我不想使用 MD5 因为它不是那么安全 我一直在查找密码哈希 但我不确定如何将其合并到我的代
  • 如何编写可以补偿拼写错误数据的 MySQL 搜索?

    有没有什么方法可以编写一个 MySQL 搜索来弥补用户在拼写等方面的错误 作为随机示例 有人可能会输入 电子邮件受保护 cdn cgi l email protection代替 电子邮件受保护 cdn cgi l email protect
  • SQLite SQL 查询出现问题[重复]

    这个问题在这里已经有答案了 我正在尝试在 SQLite 3 中运行以下查询 SELECT DISTANCE latitude longitude AS distance FROM country WHERE id NOT LIKE HAVI
  • 如何处理PDO异常[重复]

    这个问题在这里已经有答案了 我正在尝试与PDOphp 上的类 但我在找到处理错误的正确方法时遇到了一些麻烦 我编写了以下代码
  • 重用 PDO 语句 var 会使进程崩溃

    我重用一个变量来存储两个不同的 PDO mysql 语句 stmt dbh gt prepare SELECT stmt gt execute stmt dbh gt prepare UPDATE crash here Error in o
  • PDO::commit() 成功或失败

    The PHP PDO 提交 http www php net manual en pdo commit php文档指出该方法成功时返回 TRUE 失败时返回 FALSE 这是指beginTransaction 和commit 之间的语句执
  • 在 PHP 中将十进制/双精度/浮点值与 PDO 绑定的最佳方法是什么?

    看来类常量只涵盖PDO PARAM BOOL PDO PARAM INT and PDO PARAM STR用于绑定 您只是将十进制 浮点 双精度值绑定为字符串还是有更好的方法来处理它们 MySQLi 允许使用 d 类型表示 double
  • PDO 多查询“SQLSTATE[HY000]:一般错误”

    我仍在学习 PDO 所以我可能会错过一些东西 但基本上我正在尝试将一行插入表中 然后选择生成的 id 我不确定它是否喜欢一个 pdo 语句中的两个查询 这是我用来执行 SQL 的代码 public function ExecuteQuery
  • PDO 从 Postgres 获取小数秒

    当我查询日期时间字段时postgresql 9 6 用一个简单的 pdo 语句 PHP7 sql SELECT date FROM table stmt adapter gt createStatement sql stmt gt prep
  • PDO 和 MySQL 全文搜索

    我正在将所有站点代码从使用 mysql 函数转换为 PDO 关于 PDO 的 PHP 文档对于我的需求来说并不清楚 它为您提供了可以使用的功能 但没有详细解释它们在不同场景下的情况 基本上 我有一个 mysql 全文搜索 sql SELEC
  • 需要 php pdo 内爆数组并在 mysql 中插入多行

    基于this https stackoverflow com questions 4629022 how to insert an array into a single mysql prepared statement w php and
  • 使用准备好的语句的 SQL ORDER BY

    我已经尝试了该代码的所有不同类型的变体 但无法使其工作 任何人都可以指出我正确的方向吗 if isset GET s And isset GET o if strip tags htmlspecialchars GET s s sortin
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 使用 PDO 扩展的execute(array())插入语句不起作用

    stmt conn gt prepare INSERT INTO user VALUES username md5 password 1 email 0 0 cover dateofbirthYear dateofbirthMonth da
  • PDO 和 Microsoft SQL:必须声明表变量“@P1”

    我正在尝试使用 PDO 中的绑定从 Microsoft SQL 数据库中选择一些条目 我正在使用的代码看起来与我在文档中找到的代码类似 但是 当我运行它时 我收到以下警告 警告 PDOStatement execute pdostateme
  • 如何向会话表添加自定义字段

    我目前正在使用Symfony 2 1 8和内置的PdoSessionHandler 我想添加一个user id会话表中的字段用于标识会话属于哪个 登录 用户 我的想法是 我可以强制用户重新登录以破坏他的会话 就我而言 如果更新用户的权限 就
  • 使用 PDO 在 SQLite 中检索单个(且唯一)行的最简单方法

    我有这个 PDO stmt db gt prepare SELECT FROM channels WHERE id id stmt gt bindValue id id SQLITE3 INTEGER result stmt gt exec

随机推荐

  • 创建一个没有按钮的 QMessageBox

    尽管设置了 setStandardButtons 0 它不会关闭 msgBox QMessageBox msgBox msgBox setText My List msgBox setStyleSheet QDialog border 1p
  • 在 C++ 中的模板函数内初始化 auto(未知)类型的向量

    我有一个模板函数 我想在其中生成一个未知类型的向量 我试图使其自动 但编译器说这是不允许的 模板函数获取迭代器或指针 如后面的主函数内的测试程序中所示 如何解决这个问题 template
  • Google Cloud Pub-Sub 的 Avro 消息?

    在 Pub Sub 之间发布和使用的最佳数据格式是什么 我正在查看 Avro 消息格式 因为它是二进制格式 用例是实时微服务应用程序将 Avro 消息发布到 pub sub 鉴于 avro 消息最适合批量消息 以及附加二进制消息的模式 然后
  • message.awaitReactions 未检测到我的反应

    我有一个需要反应的不和谐命令 但是当我对消息作出反应时 它根本不执行任何操作 当它结束时 它会记录Collected 0 items Code const msg await message reply React to this mess
  • Emacs 中自动关闭大括号?

    我见过一个名为 Vim 的插件自动关闭 http www vim org scripts script php script 5Fid 1849 发现自this https stackoverflow com questions 10230
  • 在嵌入式设备上投射指针

    我在 32 位嵌入式系统上转换和修改指针时遇到了一个奇怪的问题 红蜂经济标签 http www redwirellc com store node 1跑步连续操作系统 http contiki os org 再具体一点 uint32 t a
  • 在 Jenkins 中使用多分支管道“定期构建”

    我正在使用 Pipeline 插件运行 Jenkins 2 我已经设置了一个多分支管道项目 其中每个分支 主分支 开发分支等 的根目录中都有一个 Jenkinsfile 设置起来很简单 但是 即使代码没有更改 我也不知道如何让每个分支定期运
  • 按数字键对字典排序

    我有一个带有整数键和整数项的字典 只需要根据键对字典进行排序 但我发现的所有示例仅适用于字符串键 将键作为数组获取 对该数组进行排序 然后使用排序后的数组从字典中提取值 Sub Tester Dim d As Object Dim i As
  • NetBeans 采用 JSF 服务器库而不是注册库

    我有一个具有以下规格的企业应用程序 EAR JavaEE 5 JDK 6 JSF 2 运行在Weblogic 11g 10 3 6 上 我里面有一个 WAR weblogic 服务器有 JSF 库 但我想要我已经提供的库 问题是 当我在 项
  • 使用changeYear 选项时,我可以让 jQuery 日期选择器显示更多年份吗?

    我在一个应用程序中使用 jQuery 日期选择器 该应用程序将用于插入和更新员工的出生日期等 我发现必须点击几次才能进入 70 年代和 80 年代 许多员工出生的年代 这很麻烦 有没有一种方法可以通过更少的点击来访问这些 未来 年代 这就是
  • 在 Flask 中调用 HTML 文件中的 python 函数

    我的 python 文件中有一个文件夹列表 在 HTML 文件中 我迭代该列表以显示页面上每个文件夹的名称 for folder in folders li a href folder folder a li endfor 我想做的是 当您
  • 既然似乎有升级推送,我们是否可以少担心 IE 6 的问题? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android autocompletetextview下拉框的元素有大字体

    我想将自动完成下拉框元素大小更改为较小的值 我对 textview settextsize 所做的任何更改仅影响字段框中的值 而不影响下拉框中的值 我正在动态添加列表项 并将我的适配器设置为资源 adapterForFromAutoText
  • 如何在合并期间优先选择一个分支中的文件?

    前段时间我从我的项目中创建了一个分支master分支 我们就这样称呼它吧new feature 当我正在工作时new feature the master分支遵循其正常的演变 现在new feature已准备好合并到master我看到一些冲
  • 如何从 Azure Key Vault 获取证书以在 docker 镜像中使用

    我在构建 docker 映像时使用 ssl 证书来与 Kubernetes 中的其他不同服务进行通信 现在我的存储库中有 ssl 证书 并将作为工件的一部分发布 我们计划将证书移至密钥库并在执行管道时获取它 我不确定如何在构建 docker
  • 如何列出表外键

    有没有办法使用 SQL 列出给定表的所有外键 我知道表名称 架构 我可以将其插入 您可以通过 information schema 表来完成此操作 例如 SELECT tc table schema tc constraint name t
  • 如何使用其基本名称而不是 Item(#) 选择 XML 子节点?

    我有点陷入以下困境 我尝试使用 VBA 将当地银行网站的汇率获取到 Excel 主要用于 XML 解析练习 我想说这是我第一次认真的尝试 经过几个小时的谷歌搜索和阅读相关的 SO 问题后 我得到了或多或少可行的解决方案 但我想对其进行优化以
  • Javascript uber 和prototype 之间的区别

    我对 javaScript 比较陌生 我正在做一些继承 我以为我知道原型是什么 但后来我遇到了 uber 方法 现在我不知道这两者之间的区别 我知道uber就像java中的super 仅此而已 但原型却让我烦恼 如果您能给我一些使用这两个的
  • 如何使用 CollectionViewSource 对 LongListSelector 进行排序

    我有一个LongListSelector目前正在填充来自的图像IsolatedStorage 我希望能够按日期按升序或降序对它们进行排序 我一直在参考http babaandthepigman wordpress com 2011 07 0
  • 准备好的语句,转义变量

    我是否需要采取任何措施来保护这三个变量 例如使用转义字符串或绑定它们 我不确定我是否正确地执行了此操作 人们只是建议使用准备好的语句 所以我正在尝试弄清楚它们 order POST order heading POST heading co