Ben belirli bir isim ile bir tablo PHP ve PDO kullanarak bağladığınız bir veritabanında olup olmadığını kontrol etmek istiyorum.
Vb MySQL, SQLite, gibi tüm veritabanı backendleri, üzerinde çalışmak zorunda
Burada bir tablo varsa kontrol etmek için tam bir fonksiyon.
/**
* Check if a table exists in the current database.
*
* @param PDO $pdo PDO instance connected to a database.
* @param string $table Table to search for.
* @return bool TRUE if table exists, FALSE if no table found.
*/
function tableExists($pdo, $table) {
// Try a select statement against the table
// Run it in try/catch in case PDO is in ERRMODE_EXCEPTION.
try {
$result = $pdo->query("SELECT 1 FROM $table LIMIT 1");
} catch (Exception $e) {
// We got an exception == table not found
return FALSE;
}
// Result is either boolean FALSE (no table found) or PDOStatement Object (table found)
return $result !== FALSE;
}
Not: istenmişse PDO sadece sessiz ve hiçbir istisna atar varsayılan olarak, istisnalar atmak olacaktır. Biz de sonucu kontrol etmek gerekir neden Thats. See PDO error handling at php.net
PDO üzerinden veritabanı kolu var, bunu yapabilirsiniz:
$tableExists = gettype($dbh->exec("SELECT count(*) FROM $table")) == 'integer';
Ya da bir fonksiyon içine.
Ben ilk başta try / catch ile karıştırmasını çalıştı, ancak tablo olmasaydı bile, bir istisna vardı. Nihayet dbh exec çağrısından döndürülen değerin veri türü için kontrol ile sona erdi. Bir maç seçme sayımı üzerinde olup olmadığı 0 orada saymak bile (ya bir tamsayı, ya da yanlış bir mantıksal hiçbir sonuç olsaydı.
Sözdizimi gerçekten basit çünkü ben, bu desteklerini PDO tüm veritabanı türleri ile çalışmak gerektiğini düşünüyorum.
Çıkış this post.
Ben özür dilemek, sadece MySQL ile çalışacağını, oynanırsa
Ben veritabanı varsa (ve yararlı) olduğu, bunlardan herhangi çalışabilir kontrol CodeIgniter ile benim web uygulamaları bir kaç şey:
@$this->load->database();
$v = @$this->db->version()
$tables = @$this->db->list_tables();
Ekleme @
onları PHP kurulumunda etkin varsa hatalarını bastırmak ve version()
ve list_tables()
belirlemek için değil sadece kullanılabilir sonuçlarını kontrol edecek eğer DB civarındadır (ama çok aklı başında olduğunu).
Ben gitmeden önce, ben bu MySQL özgü bir çözüm olduğunu fark yoktur.
Burada belirtilen tüm çözüm yolları olsa da, ben (şahsen) istisnalar (kişisel tercihi, hepsi bu) atma PDO'yu tutmak istiyorum.
Gibi, ben bunun yerine tablo oluşturma sınamak için aşağıdakileri kullanabilirsiniz:
SHOW TABLES LIKE 'some_table_of_mine';
Tablo yoksa oluşturulan herhangi bir hata durumu yok, sadece bir sıfır resultset olsun. Benim için hızlı ve sürekli çalışır.