Qual è il modo migliore per verificare se esiste una tabella in MySQL (preferibilmente tramite PDO in PHP) senza generare un'eccezione. Non ho voglia di analizzare i risultati di "SHOW TABLES LIKE" eccetera. Ci deve essere una sorta di query booleana?MySQL verifica se esiste una tabella senza generare un'eccezione
risposta
non so la sintassi DOP per esso, ma questo sembra abbastanza straight-forward:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
Se stai usando MySQL 5.0 e versioni successive, si potrebbe provare:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Eventuali risultati indicano esiste il tavolo.
Da: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Utilizzando mysqli ho creato seguente funzione. Supponendo che tu abbia un'istanza mysqli chiamata $ 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);
}
Spero che sia d'aiuto.
Attenzione: come sugested da @jcaron questa funzione potrebbe essere vulnerabile a SQL injection Attac, in modo da assicurarsi che il $table
var è pulito o anche un uso migliore parametrizzata query.
Solo se si lascia che qualcuno riempia la tabella $ var, non tutte le var all'interno di una statistica sql sono pericolose, solo se si ottengono i dati da fonti non attendibili. Ovviamente sei responsabile di come usi la funzione e fai il filtraggio. non c'è bisogno di downvotare questa risposta. – Falk
Se pubblichi un codice come questo, qualcuno finirà per usarlo in un posto dove i dati non sono stati controllati correttamente e finirà con un'iniezione SQL. Basta usare le richieste parametrizzate e eviterete qualsiasi problema, indipendentemente dal fatto che i dati siano stati controllati o meno. Non c'è alcuna ragione per non farlo qui, è solo una cattiva pratica. – jcaron
Che ne dici di aggiungere una stringa real_escape_string? – Falk
Perché lo rende così difficile da capire?
function table_exist($table){
$pTableExist = mysql_query("show tables like '".$table."'");
if ($rTableExist = mysql_fetch_array($pTableExist)) {
return "Yes";
}else{
return "No";
}
}
** Iniezione SQL ** – 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";
}
}
Aggiungere un commento accurato per il codice per fornire la migliore qualità di risposta. Basta incollare un codice che non dice molto all'autore della domanda. –
Questo è in realtà orribile. Quindi, se ci sono 50.000 tabelle, dovresti caricare tutte le tabelle, scorrere ciclicamente ognuna per trovare se esiste la tabella corretta? –
Ecco la mia soluzione che preferisco quando si utilizzano le stored procedure. Funzione mysql personalizzata per verificare la presenza della tabella nel database corrente.
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
Questo viene pubblicato semplicemente se qualcuno viene in cerca di questa domanda. Anche se è stata data una risposta un po '. Alcune delle risposte lo rendono più complesso del necessario.
per MySQL * ho usato:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
In PDO ho usato:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Con questo voglio solo spingere la condizione else dentro o. E per i miei bisogni ho semplicemente bisogno di morire. Anche se puoi impostare o ad altre cose. Alcuni potrebbero preferire il se/else se/else. Che è quindi rimuovere o e quindi fornire se/else se/else.
Come una "Mostra tabelle" potrebbe essere lento su basi di dati più grandi, mi consiglia di utilizzare "descrivere" e verificare se si ottiene vero/falso come risultato quadro
$tableExists = mysqli_query("DESCRIBE `myTable`");
Da quello che ho letto se 'SHOW' diventa inefficiente allora 'information_schema' è più preferito su 'DESCRIBE'. – Esoterica
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;
}
Se la ragione per voler fare ciò è la creazione della tabella condizionale, allora 'CREATE TABLE SE NOT EXISTS' sembra l'ideale per il lavoro. Fino a quando ho scoperto questo, ho usato il metodo 'DESCRIBE' sopra. Maggiori informazioni qui: MySQL "CREATE TABLE IF NOT EXISTS" -> Error 1050
- 1. BigQuery - Verifica se la tabella esiste già
- 2. Verifica se esiste una risorsa
- 3. PL/pgSQL verifica se esiste una riga
- 4. Verifica se esiste una inclusione (o richiesta)
- 5. HTML5 LocalStorage: verifica se esiste una chiave
- 6. PHP e MySql verifica se la tabella è vuota
- 7. Java MySQL verifica se il valore esiste nel database
- 8. MySQL: Inserisci se esiste una chiave esterna
- 9. Android; Verifica se il file esiste senza crearne uno nuovo
- 10. jQuery: Verifica se l'immagine esiste
- 11. Verifica se l'immagine dell'URL esiste
- 12. RavenDb verifica se l'indice esiste
- 13. Verifica se esiste un oggetto
- 14. Cakephp verifica se il record esiste
- 15. Controlla se la colonna esiste nella tabella Mysql tramite php
- 16. Come verificare se esiste una tabella Cassandra
- 17. Amazon Redshift: se esiste una tabella drop
- 18. Verificare se esiste una tabella di accesso
- 19. Come testare se esiste già una tabella?
- 20. Verifica se una riga può essere eliminata in MySQL
- 21. node.js verifica se esiste un URL remoto
- 22. Verifica se il file di risorse esiste
- 23. Elimina riga se la tabella esiste SQL
- 24. Verifica se una stringa contiene numeri
- 25. MySQL Seleziona un'altra riga se non esiste
- 26. MySQL: Come aggiungere una colonna se non esiste già?
- 27. Flask-SQLAlchemy controlla se esiste una riga nella tabella
- 28. Verifica se la colonna esiste già e se non altera la tabella in sqlite
- 29. Boost PropertyTree: verifica se esiste un figlio
- 30. Il modo migliore per verificare se esiste una riga in una tabella MySQL
grazie, totalmente dimenticato che SHOW TABLES LIKE potrebbe essere limitato a una sola tabella esatta – clops
PDO: $ tableExists = $ db-> query ("MOSTRA TABELLE LIKE 'myTable'") -> rowCount()> 0; – cgTag
mysqli: if ($ db-> interrogazione ("MOSTRA tabelle come 'myTable'") -> numero_colonne == 0) { // create table } – zPuls3