Jawaban:
Saya tidak tahu sintaks PDO untuk itu, tetapi ini tampaknya cukup mudah:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
fungsi, fungsi tersebut secara resmi tidak digunakan lagi , tidak lagi dipertahankan, dan akan dihapus di masa mendatang. Anda harus memperbarui kode Anda dengan PDO atau MySQLi untuk memastikan fungsionalitas proyek Anda di masa mendatang.
Jika Anda menggunakan MySQL 5.0 dan yang lebih baru, Anda dapat mencoba:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Hasil apapun menunjukkan tabel tersebut ada.
Dari: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Menggunakan mysqli saya telah membuat fungsi berikut. Dengan asumsi Anda memiliki instance mysqli yang disebut $ con.
function table_exist($table){
global $con;
$table = $con->real_escape_string($table);
$sql = "show tables like '".$table."'";
$res = $con->query($sql);
return ($res->num_rows > 0);
}
Semoga membantu.
Peringatan: seperti yang disarankan oleh @jcaron, fungsi ini bisa jadi rentan terhadap sqlinjection attacs, jadi pastikan $table
var Anda bersih atau bahkan lebih baik gunakan kueri berparameterisasi .
Ini diposting hanya jika ada yang datang mencari pertanyaan ini. Meski sudah terjawab sedikit. Beberapa balasan membuatnya lebih kompleks dari yang seharusnya.
Untuk mysql * saya menggunakan:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
Di PDO saya menggunakan:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Dengan ini saya hanya mendorong kondisi lain ke dalam atau. Dan untuk kebutuhan saya, saya hanya perlu mati. Padahal Anda bisa mengatur atau untuk hal lain. Beberapa mungkin lebih suka jika / lain jika / lain. Yang kemudian menghapus atau dan kemudian menyediakan if / else if / else.
Inilah solusi saya yang saya sukai saat menggunakan prosedur tersimpan. Fungsi mysql kustom untuk memeriksa tabel yang ada di database saat ini.
delimiter $$
CREATE FUNCTION TABLE_EXISTS(_table_name VARCHAR(45))
RETURNS BOOLEAN
DETERMINISTIC READS SQL DATA
BEGIN
DECLARE _exists TINYINT(1) DEFAULT 0;
SELECT COUNT(*) INTO _exists
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_name = _table_name;
RETURN _exists;
END$$
SELECT TABLE_EXISTS('you_table_name') as _exists
Karena "Tampilkan tabel" mungkin lambat pada database yang lebih besar, saya sarankan untuk menggunakan "DESCRIBE" dan periksa apakah Anda mendapatkan true / false sebagai hasilnya
$tableExists = mysqli_query("DESCRIBE `myTable`");
$q = "SHOW TABLES";
$res = mysql_query($q, $con);
if ($res)
while ( $row = mysql_fetch_array($res, MYSQL_ASSOC) )
{
foreach( $row as $key => $value )
{
if ( $value = BTABLE ) // BTABLE IS A DEFINED NAME OF TABLE
echo "exist";
else
echo "not exist";
}
}
Kerangka Zend
public function verifyTablesExists($tablesName)
{
$db = $this->getDefaultAdapter();
$config_db = $db->getConfig();
$sql = "SELECT COUNT(*) FROM information_schema.tables WHERE table_schema = '{$config_db['dbname']}' AND table_name = '{$tablesName}'";
$result = $db->fetchRow($sql);
return $result;
}
Jika alasan Anda ingin melakukan ini adalah pembuatan tabel bersyarat, maka 'BUAT TABEL JIKA TIDAK ADA' tampaknya ideal untuk pekerjaan itu. Sampai saya menemukan ini, saya menggunakan metode 'DESCRIBE' di atas. Info lebih lanjut di sini: MySQL "CREATE TABLE IF NOT EXISTS" -> Error 1050