【问题标题】:Php/SQL/DB2 special characters in where clausewhere 子句中的 PHP/SQL/DB2 特殊字符
【发布时间】:2011-10-19 15:39:36
【问题描述】:

我正在尝试使用 PHP 和“DB2_exec”而不是 mysql 对 DB2 数据库(在 iSeries 上)进行 SQL。

我的WHERE 子句(变量$EncSSN)中有这些字符导致SQL 语句停止:ðIn*Éæng“”Ò×ÑRÈ•`

SQL 构造如下:

select EENUM, EESSN 
from EEMAST 
where EESSN = '$EncSSN'

表 EESSN 中的字段包含加密值。 - 我没有错误,也没有日志条目。 html 呈现一个空白页面。 - 我尝试用转义字符 '\' 替换 (str_replace) 引号、单引号、句点等 - 我无法使用 mysql_real_escape_string,因为我正在加载 db2_connect 资源。

如果我更改上面的 SQL 语句 where 以从不同的字段中选择一个值,我的 html 会正确呈现。

你能想到我能做到这一点吗?

史蒂文

【问题讨论】:

  • 在您进一步查看之前 - 您确定您的数据库已设置为处理这些字符吗?大多数旧表使用 EBCDIC 编码,该编码具有受限字符集。
  • 数据库当前包含数千条记录,其中包含 EESSN 列中的加密值。我正在尝试使用加密列作为密钥检索记录
  • 行之有效的语句是什么样的? 唯一是您更改了字段引用吗?
  • 没错,另一条语句是这样的:select EENUM, EESSN,EEAN8 from EEMAST where EEAN8 = 12345 这显示了SSN记录应该显示的记录。我感谢你试图帮助我。我对这项任务感到沮丧
  • 除了您刚刚更改了传递给 DB2 的数据,以及用于比较的字段。如果您使用相同的加密数据指定 EEAN8 字段会发生什么?你得到一个空白页面,还是得到一个空的结果集(假设它们不同)?此外,检查您的 DB2 连接是否包含错误处理能力,并查看可以为您提供哪些信息。

标签: php db2


【解决方案1】:

Prepare SQL 并使用数组方法为 where 子句设置参数。永远不要尝试通过字符串函数构建 SQL 查询。

【讨论】:

  • 这在面向网络的环境中尤其重要。
【解决方案2】:

试试addslashes()函数http://php.net/manual/en/function.addslashes.php

heredocnowdoc 语法 http://php.net/manual/en/language.types.string.php

您也可以将 sql 放入存储过程中,但您可能对参数值有相同的问题,需要尝试上述方法之一。

【讨论】:

  • 我尝试过 addlashes、str_replace 和 db2_escape_string 无济于事。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多