Yanıtlar:
Bunun için PDO sözdizimini bilmiyorum, ancak bu oldukça basit görünüyor:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
fonksiyonlar, bunlar edilir resmi olarak artık , artık korunur ve olacaktır kaldırıldı gelecekte. Gelecekte projenizin işlevselliğini sağlamak için kodunuzu PDO veya MySQLi ile güncellemelisiniz .
MySQL 5.0 ve sonraki bir sürümünü kullanıyorsanız şunları deneyebilirsiniz:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Herhangi bir sonuç tablonun var olduğunu gösterir.
Gönderen: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Mysqli kullanarak aşağıdaki işlevi oluşturdum. Demek ki $ con adında bir mysqli örneğiniz var.
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);
}
Umarım yardımcı olur.
Uyarı: @jcaron tarafından önerildiği üzere, bu işlev sqlinjection saldırılarına karşı savunmasız olabilir, bu nedenle var'ınızın $table
temiz olduğundan emin olun veya daha iyi parametreli sorgular kullanın.
Bu soruyu arayan biri gelirse bu sadece yayınlanır. Biraz cevaplanmış olsa da. Bazı yanıtlar, olayı olması gerekenden daha karmaşık hale getiriyor.
Mysql için * kullandım:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
PDO'da kullandım:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Bununla sadece else koşulunu veya içine itiyorum. Ve ihtiyaçlarım için sadece ölmeye ihtiyacım var. Yine de başka şeyler ayarlayabilirsin. Bazıları if / else if / else'i tercih edebilir. Bu, sonra veya kaldırmak ve sonra if / else if / else sağlamaktır.
İşte saklı yordamları kullanırken tercih ettiğim çözümüm. Mevcut veritabanında tablonun mevcut olup olmadığını kontrol etmek için özel mysql işlevi.
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
Daha büyük veritabanlarında "Tabloları göster" yavaş olabileceğinden, "AÇIKLAMA" kullanmanızı ve sonuç olarak doğru / yanlış olup olmadığınızı kontrol etmenizi öneririm
$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";
}
}
Zend çerçevesi
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;
}
Bunu yapmak istemenin nedeni koşullu tablo oluşturmaksa, 'MEVCUT DEĞİLSE TABLO OLUŞTUR' iş için ideal görünüyor. Bunu keşfedene kadar yukarıdaki 'DESCRIBE' yöntemini kullandım. Burada daha fazla bilgi: MySQL "MEVCUT DEĞİLSE TABLO OLUŞTUR" -> Hata 1050