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 在字符串连接中准备的主要内容,如果未能解决你的问题,请参考以下文章

mysql连接选mysqli还是PDO

在 PDO 准备语句中将查询与 if else 连接

DB2如何使用PDO指定连接字符集

php使用pdo连接mysql数据库如何设置发送的字符集?

用odbc和php pdo连接impala,字符串字段为空

pdo的简单介绍和使用