PDO et SQL 4D

# Indications sur le SQL supporté par 4D

(No version information available, might only be in Git)

Indications sur le SQL supporté par 4D — PDO et SQL 4D

### Description

4D implémente le standard ANSI 89 strict, et le fait respecter. Il est recommandé de bien lire la documentation 4D sur les commandes disponibles, dans la documentation à l'adresse suivante : » http://doc.4d.com/. La liste des particularités de 4D ci-dessous est une introduction, et ne saurait être exhaustive.

Liste des caractéristiques SQL de 4D
Caractéristique | Solution | Note
--- | --- | ---
INTEGER | Modifier la requête de création de la table. | INT est le type officiellement supporté.
CHAR | Utilisez VARCHAR à la place. | Non supporté en 4D v12.0
UNION | Faire plusieurs requêtes séparées. | Non supporté en 4D v12.0
SELECT 1 + 1; | SELECT 1 + 1 FROM _USER_SCHEMAS; | FROM est toujours obligatoire.
REAL, FLOAT | Transtyper le FLOAT en FLOAT ou en STRING avec la fonction SQL 4D (CAST, ROUND, TRUNC ou TRUNCATE) | Non supporté dans les versions courantes du pilote PDO_4D
Typage fort | Réécrivez votre requête SQL, ou bien ajouter du code PHP pour gérer les données dans les types attendus. | Il faut utiliser le type exact que 4D attend. On ne peut pas insérer '1' (la chaîne), dans une colonne entière.
PDO::execute($row)() | Utiliser les commandes préparées, et spécifier les bons types. | L'extension PDO fait passer toutes les données comme des chaînes, et présume que la base assure le transtypage.
SELECT NULL FROM TABLE | N'utilisez pas de constantes NULL. Extrayez les des tables. | Il n'est pas autorisé d'utiliser la constante NULL dans la liste sélectionnée.
SELECT * FROM TABLE WHERE 1 | Utilisez 1 = 1 | Une constante ne peut pas être utilisée dans la clause WHERE.
SHOW TABLES | Utilisez les tables système. | Utilisez les tables _USER_TABLES, _USER_COLUMNS, _USER_INDEXES, _USER_CONSTRAINTS, _USER_IND_COLUMNS, _USER_CONS_COLUMNS et _USER_SCHEMAS.
Délimiteur de structures SQL | Utilisez la fonction de protection suivante sur les noms d'objets SQL : function sqlEscapeElement(elem) { return '[' . str_replace(']',']]', $elem) . ']'; } | Pour la protection des noms d'objets SQL (tables, champs, utilisateurs, groupe, schéma, clé primaire, etc.. ) il faut doubler les crochets fermants et mettre tout l'identifiant entre crochets.