La base de données INFORMATION_SCHEMA fait partie de la spécification ANSI 2003, vous pouvez donc l'utiliser à travers tout fournisseur DB qui le soutient (MySQL, Postgresql , SQLite, MSSQL 2k5 +).
/*public static*/ function is_dbtype($table, $column, $type) {
$db = (...)::getInstance(); // assuming PDO
$sql = 'SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS '.
'WHERE TABLE_NAME = :table AND COLUMN_NAME = :column';
$st = $db->prepare($sql);
$st->execute(array(':table' => $table, ':column' => $column));
return ($type == $st->fetchColumn());
}
changement COLUMN_TYPE à DATA_TYPE si vous voulez juste "varchar" au lieu de "varchar (64)". Si vous avez besoin de plus, il y a beaucoup. IS_NULLABLE, numeric_precision, CHARACTER_SET_NAME, etc.
(Je ne sais pas j'utiliser utilise ce bien, les faire assez souvent des fonctions is_*
sans appel de base de données supplémentaire Plus important encore, info_schema détient la la structure de chaque base de données sur le serveur, l'octroi de permissions de lecture sur ce serveur pourrait (devrait) être un gros problème.) Si vous êtes sur un hôte partagé, vous n'y aurez probablement jamais accès.)
MySQL- seulement alternatif: faire semblable mais avec DESCRIBE [table]
. C'est assez explicite cependant, vous devrez pêcher vous-même le "bigint" dans "bigint (21) unsigned" si c'est tout ce que vous voulez.
Personne ne le sait? Je ne peux pas être le premier à penser que cela pourrait être utile! – Industrial
Le BOUNTY est activé! – Industrial