(バージョン情報なし。おそらく SVN 版にしか存在しないでしょう)
4D で使える SQL — PDO および SQL 4D
4D は ANSI 89 標準規格を厳密に実装しています。 使えるコマンドについて学ぶには 4D SQL ドキュメントを読むことを推奨します。 マニュアルの URL は » http://doc.4d.com/ です。以下に 4D SQL 独特の特徴をまとめました。 包括的なものではありませんが、導入としては使えるでしょう。
特徴 | 代替策 | 注意 |
---|---|---|
INTEGER | INT を使うよう SQL を変更する | 4Dv12.0 で整数をサポートする型は INT です。 |
CHAR | かわりに VARCHAR を使う | 4Dv12.0 ではサポートしていません。 |
UNION | 未サポート。クエリを分割する | 4Dv12.0 ではサポートしていません。 |
SELECT 1 + 1; | SELECT 1 + 1 FROM _USER_SCHEMAS; | FROM は必須です。 |
FLOAT | FLOAT 値を SQL 4D 関数 (CAST, ROUND, TRUNC あるいは TRUNCATE) で FLOAT あるいは STRING にキャストする | 現在のバージョンの PDO_4D ドライバではサポートしていません。 |
強い型付け | SQL クエリの作成時に気をつけ、PHP のコードがきちんと期待通りの型のデータを渡すようにする | 正しい型を 4D に渡さなければなりません。'1' (文字列) を INTEGER のカラムに挿入することはできません。 |
PDO::execute($row)() は、テーブルのすべてのカラムが TEXT 型あるいは VARCHAR 型のときのみ動作する | プリペアドステートメントを使い、正しい型を渡す | PDO 拡張モジュールは、execute() の実行時にすべての値を文字列へキャストします。そして SQL データベース側で値をパースさせようとします。 |
SELECT NULL FROM TABLE | 定数 NULL を使わず、テーブルから取り出す | select のリストに定数 NULL を使うことはできません。 |
SELECT * FROM TABLE WHERE 1 | WHERE 1 = 1 を使う | WHERE 句で定数を使うことはできません。 |
SHOW TABLES | システムテーブルを使う | テーブルやスキーマ、インデックスなどの一覧は、 _USER_TABLES, _USER_COLUMNS, _USER_INDEXES, _USER_CONSTRAINTS, _USER_IND_COLUMNS, _USER_CONS_COLUMNS および _USER_SCHEMAS といったシステムテーブルから取得します。 |
SQL 構文の区切り文字 | 次の関数を使って SQL の要素を保護する function sqlEscapeElement(elem) { return '[' . str_replace(']',']]', $elem) . ']'; } | SQL の要素名 (テーブル、フィールド、ユーザ、グループ、 スキーマ、主キーなど) をエスケープするには、 識別子全体を角括弧で囲み、さらに閉じ角括弧 ']' は二重にしておかなければなりません。 |