Antworten:
Ich kenne die PDO-Syntax dafür nicht, aber das scheint ziemlich einfach zu sein:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
Funktionen, werden sie offiziell als veraltet , nicht mehr aufrecht erhalten und werden entfernt in der Zukunft. Sie sollten Ihren Code mit PDO oder MySQLi aktualisieren , um die Funktionalität Ihres Projekts in Zukunft sicherzustellen.
Wenn Sie MySQL 5.0 und höher verwenden, können Sie Folgendes versuchen:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Alle Ergebnisse zeigen an, dass die Tabelle vorhanden ist.
Von: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Mit mysqli habe ich folgende Funktion erstellt. Angenommen, Sie haben eine mysqli-Instanz namens $ 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);
}
Ich hoffe es hilft.
Warnung: Wie von @jcaron vorgeschlagen, ist diese Funktion möglicherweise anfällig für sqlinjection-Attacs. Stellen Sie daher sicher, dass Ihre Variable sauber $table
ist, oder verwenden Sie besser parametrisierte Abfragen.
Dies wird einfach gepostet, wenn jemand nach dieser Frage sucht. Obwohl es ein bisschen beantwortet wurde. Einige der Antworten machen es komplexer als nötig.
Für MySQL * habe ich verwendet:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
In PDO habe ich verwendet:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Damit schiebe ich einfach die else-Bedingung in oder. Und für meine Bedürfnisse brauche ich nur einfach zu sterben. Obwohl Sie oder zu anderen Dingen setzen können. Einige bevorzugen vielleicht das if / else if / else. Welches ist dann zu entfernen oder und dann zu liefern, wenn / sonst wenn / sonst.
Hier ist meine Lösung, die ich bei der Verwendung gespeicherter Prozeduren bevorzuge. Benutzerdefinierte MySQL-Funktion zum Überprüfen, ob die Tabelle in der aktuellen Datenbank vorhanden ist.
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
Da "Tabellen anzeigen" in größeren Datenbanken möglicherweise langsam ist, empfehle ich die Verwendung von "DESCRIBE" und überprüfe, ob Sie als Ergebnis true / false erhalten
$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 Framework
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;
}
Wenn der Grund dafür die bedingte Tabellenerstellung ist, ist "TABELLE ERSTELLEN, WENN NICHT EXISTIERT" für den Job ideal. Bis ich dies entdeckte, habe ich die oben beschriebene Methode 'DESCRIBE' verwendet. Weitere Infos hier: MySQL "TABELLE ERSTELLEN, WENN NICHT EXISTIERT" -> Fehler 1050