【发布时间】:2021-01-24 13:07:58
【问题描述】:
我想使用一个使用 PDO 的 php 库。我想用一个 Oracle 数据库。
问题是该库的作者在他们的查询中使用不带引号的标识符,例如:
$statement = $pdo->prepare('SELECT * from some_table where some_column = :some_column');
$statement->execute(['some_column' => 'some value']);
$result = $statement->fetch(\PDO:FETCH_ASSOC);
return $result['some_other_column'];
在这种情况下,Oracle 将标识符的大小写转换为大写,但作者假设大小写较小,因此出现 undefined index php 错误。
如何绕过这个?
UPD。我在创建数据库对象时尝试使用小写,例如:
CREATE TABLE "some_table"
(
"some_column" VARCHAR(10),
"some_other_column" VARCHAR(10)
);
- 但是在这种情况下,Oracle 在执行上面的SELECT 语句时会引发错误,因为其中的标识符被转换为大写,而对象名称为小写。
UPD 2.
我不应该编辑第三方库的源代码 - 必须以某种方式配置我的环境和连接:Oracle、PHP、PDO。
【问题讨论】:
-
我不懂 PHP,但是 - 就 Oracle 而言 - 如果您想保持字母大小写,请将这些 标识符 括在双引号中。看看有没有帮助。
-
@Littlefoot 如果我不是该库的开发人员,我该怎么做?您是否建议在他们使用 SQL 查询的每个地方覆盖他们的代码?
-
呃,不。正如我所说,我不了解 PHP,我不知道它实际上是如何工作的。我希望其他人能够提供帮助。
-
@YourCommonSense, IMO, pdo 已经使用 case_natural - 这就是它以大写形式返回结果的原因。但是您给了我一个好主意-我会尝试强制它使用小写(因为库的作者使用小写)-也许会有所帮助
标签: php oracle pdo case-sensitive