Was ist der beste Weg zu überprüfen, ob eine Tabelle in MySQL existiert (vorzugsweise über PDO in PHP), ohne eine Ausnahme zu werfen. Ich habe keine Lust, die Ergebnisse von "SHOW TABLES LIKE" und so weiter zu analysieren. Es muss eine Art boolesche Abfrage geben?MySQL prüfen, ob eine Tabelle existiert, ohne eine Ausnahme zu werfen
Antwort
ich weiß nicht, die PDO-Syntax für sie, aber dies scheint ziemlich geradlinig:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
Wenn Sie MySQL 5.0 und höher verwenden, könnten Sie versuchen:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Alle Ergebnisse zeigen, besteht die Tabelle.
Von: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Oh! Daran habe ich nicht gedacht. Lassen Sie mich überprüfen, ob es wie erwartet funktioniert! – clops
vielleicht fehlt mir etwas, aber warum sollten Sie diese Methode über SHOW TABLES verwenden? – nickf
@nickf Es ist Teil des Ansi-Standards, also ist es zwischen verschiedenen rdbms austauschbar. – troelskn
Mit Mysqli i folgende Funktion erstellt haben. 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 @jcaron diese Funktion sugested könnte zu SQL-Injection Attacken anfällig sein, so stellen Sie sicher, dass Ihr $table
var sauber ist oder noch besser Anfragen Verwendung parametriert.
Nur wenn Sie jemanden die $ table var füllen lassen, ist nicht jede Variable innerhalb einer SQL-Anweisung gefährlich, nur wenn Sie die Daten von nicht vertrauenswürdigen Quellen erhalten. Natürlich sind Sie dafür verantwortlich, wie Sie die Funktion nutzen und filtern. Es gibt keine Notwendigkeit, diese Antwort zu verwerfen. – Falk
Wenn Sie Code wie diesen veröffentlichen, wird er am Ende an einer Stelle verwendet, an der die Daten nicht richtig überprüft wurden, und wird mit einer SQL-Injektion enden. Verwenden Sie einfach parametrisierte Anfragen, und Sie vermeiden jedes Problem, ob die Daten geprüft wurden oder nicht. Es gibt keinen Grund, dies hier nicht zu tun, es ist nur eine schlechte Übung. – jcaron
Wie wäre es mit einem Real_escape_string? – Falk
Warum machen Sie es so schwer zu verstehen?
function table_exist($table){
$pTableExist = mysql_query("show tables like '".$table."'");
if ($rTableExist = mysql_fetch_array($pTableExist)) {
return "Yes";
}else{
return "No";
}
}
** SQL Injection ** – jcaron
$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";
}
}
Bitte fügen Sie einen genauen Kommentar für den Code, um die beste Qualität der Antwort zu bieten. Einfach etwas Code einfügen, sagt dem Autor der Frage nicht viel. –
Das ist eigentlich schrecklich. Also, wenn es 50.000 Tabellen gibt, würden Sie alle Tabellen laden, durchschleifen, um herauszufinden, ob die richtige Tabelle existiert? –
Hier ist die Lösung, die meine ich es vorziehen, wenn gespeicherte Prozeduren verwenden. 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
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
Dies ist einfach geschrieben, wenn jemand auf die Suche nach dieser Frage kommt. Obwohl es ein wenig beantwortet wurde. Einige der Antworten machen es komplexer als es sein müsste.
für MySQL * I verwendet:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
In PDO I verwendet:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Damit ich den sonst Zustand nur einschieben oder. Und für meine Bedürfnisse muss ich nur sterben. Obwohl Sie oder andere Dinge festlegen können. Manche mögen das if/else if/else bevorzugen. Was dann zu entfernen ist und dann if/else if/else liefert.
Als "Show-Tabellen" könnte auf größere Datenbanken langsam, I "DESCRIBE" empfehlen und prüfen Sie, ob Sie
$tableExists = mysqli_query("DESCRIBE `myTable`");
Von dem, was ich gelesen habe, wenn 'SHOW' ineffizient wird, ist 'information_schema' gegenüber 'DESCRIBE' vorzuziehen. – Esoterica
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;
}
als Ergebnis wahr/falsch erhalten Wenn der Grund dafür die Erstellung einer bedingten Tabelle ist, dann scheint "CREATE TABLE IF NOT EXISTS" ideal für den Job zu sein. Bis ich das entdeckte, benutzte ich die 'DESCRIBE'-Methode oben. Mehr Infos hier: MySQL "CREATE TABLE IF NOT EXISTS" -> Error 1050
- 1. Prüfen, ob eine Eigenschaft existiert, ohne Ausnahme zu werfen yii2
- 2. ADO.Net Excel, Prüfen, ob eine Tabelle existiert?
- 3. Überprüfen, ob eine Tabelle in MySQL existiert
- 4. Kann MySQL prüfen, ob die Datei existiert?
- 5. prüfen, ob eine Variable in Javascript existiert
- 6. prüfen, ob eine Adresse existiert in R
- 7. Prüfen, ob in DataTable eine Zeile existiert?
- 8. Wie zu verwenden Wie zu prüfen, ob eine Übereinstimmung existiert
- 9. Ansible prüfen, ob Wörterbuch existiert
- 10. Excel/VBA, um zu prüfen, ob eine Zeile existiert
- 11. Sollte ich vor dem Löschen prüfen, ob eine Zeile existiert?
- 12. MySQLi, wie zu prüfen, ob die Tabelle existiert?
- 13. Test-SQL-Verbindung ohne Ausnahme zu werfen
- 14. Wie überprüft man, ob eine MySQL-Datenbank existiert
- 15. Überprüfen Sie, ob eine SQL-Tabelle existiert
- 16. Prüfen, ob PropertyInfo.SetValue wird ein Argument werfen
- 17. Gibt es eine Rails-Funktion, um zu prüfen, ob eine partielle existiert?
- 18. UWP Prüfen ob Datei existiert
- 19. Codeigniter: Wie kann ich prüfen, ob eine Bibliotheksmethode existiert, ohne die Bibliothek zu laden?
- 20. Eine andere Verzweigung einschalten (Erstellen, falls nicht vorhanden), ohne zu prüfen, ob sie bereits existiert?
- 21. RavenDb prüfen, ob Index existiert
- 22. Abfrage, um zu prüfen, ob viele-zu-viele-Beziehung existiert
- 23. Mysql - Überprüfen, ob Zeile existiert
- 24. Sollte ich eine Ausnahme werfen
- 25. Prüfen, ob ein Webservice existiert
- 26. Prüfen, ob die ID zweimal in einer fremden Tabelle existiert
- 27. Prüfen, ob der Dienst existiert
- 28. Wie kann ich prüfen, ob eine SQL Server-Einschränkung existiert?
- 29. Wie kann ich prüfen, ob eine Variable in Scheme existiert?
- 30. Prüfen, ob eine Variable in tmpl_context existiert (Python, Pylons, Genshi)?
Danke, total vergessen, dass SHOW TABLES LIKE auf genau eine Tabelle beschränkt sein könnte – clops
PDO: $ tableExists = $ db-> query ("TABELLEN ANZEIGEN WIE 'myTable'") -> rowCount()> 0; – cgTag
mysqli: if ($ db-> query ("SHOW TABLES LIKE 'myTable'") -> num_rows == 0) { // create table } – zPuls3