pdo 在字符串连接中准备
Posted
技术标签:
【中文标题】pdo 在字符串连接中准备【英文标题】:pdo prepare in string concatenation 【发布时间】:2022-01-21 05:29:03 【问题描述】:我的问题很奇怪,我有一个带有 pdo 的 mssql 的 php 后端,我不能使用准备语句来转义字符串作为设计,因为我的查询是由更多的字符串连接构建的。此后端服务于数据表项目并使用 ajax 执行服务器端查询。
后端错误是无法发送到 db 特殊字符,因为目标未转义。使用 prepare 实现标准转义非常困难,因为我没有一个构建查询的点。当查询发送到数据库时,目标已经写在字符串中,我不能使用准备。
只是为了确保我会发布这个 php 函数: nopaste of concrete php script
它使用自定义的 pdo 类,但我认为现在并不重要。
我想知道是否有一种方法可以使用来自 pdo 的标准准备,而不是直接放置字符串 $global_target 和 $individual_target 我可以使用两个占位符来替换真实字符串,以这种方式执行我无法控制 pdo prepare 语句使用了多少疑问句,因为经典的 prepare 语句是
$结果集 = $db->query($sql)->bind(1,$myvar)->bind(2,$myvar2)->bind(...)->resultset();
在我的例子中 $sql 是动态构建的,我不知道有多少搜索发送给用户,所以这是一个不好的策略。
简而言之,我需要一个提示来逃避带有两个字符串变量的输入搜索。 问候。
【问题讨论】:
您可以使用concat()
SQL function 或+
concatenation operator 在查询中进行连接,只需将单个子字符串作为参数传递。或者只是修复奇怪的架构。
问题是当sql接收查询之前包含特殊字符时输入目标如何处理,当查询是变量时
只使用参数。不要尝试任何转义“你自己”(或任何 *escape*()
函数。它只会以正确的方式被转义一次。
你能写出第 97 行的全局搜索示例和第 162 行的单个搜索示例吗?
我想我需要一个函数来编码/解码这个字符串,一种 json stringify
【参考方案1】:
好的,我用简单的 php 字符串替换解决了。此尝试已作为第一次尝试完成,但这次我在从参数中获取字符串时将单引号替换为 4 个引号。暂时就这些了,问候。
【讨论】:
以上是关于pdo 在字符串连接中准备的主要内容,如果未能解决你的问题,请参考以下文章