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は識別子の大文字と小文字をUPPERに変換しますが、作成者は大文字と小文字が小さいと想定しているため、undefined index
phpエラーが発生します。
これをバイパスするにはどうすればよいですか?
UPD。データベースオブジェクトを作成するときに小文字を使用しようとしました。例:
CREATE TABLE "some_table"
(
"some_column" VARCHAR(10),
"some_other_column" VARCHAR(10)
);
-ただし、この場合、SELECT
上記のステートメントを実行すると、エラーが発生します。これは、その中の識別子が大文字に変換され、オブジェクト名が小文字に変換されるためです。
UPD2。
サードパーティのライブラリのソースコードを編集するべきではありません。環境と接続(Oracle、PHP、PDO)を何らかの方法で構成する必要があります。
Your Common Sense
のコメントのおかげで、私の場合の解決策を見つけました。
ライブラリを初期化するときに、PDOオブジェクトを渡します。次のコードを使用して、常に小文字を使用するように構成しました。
$options = [
PDO::ATTR_CASE => PDO::CASE_LOWER,
];
$connection = new PDO($dsn, $username, $password, $options);
init3rdPartyLibrary($connection);
このため、$result
によって返される変数のキーは$statement->fetch()
小文字になり、ライブラリは作成者の期待どおりに機能します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加