Risposte:
Non conosco la sintassi PDO per questo, ma sembra piuttosto semplice:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
funzioni, sono ufficialmente deprecate , non più mantenute e verranno rimosse in futuro. È necessario aggiornare il codice con PDO o MySQLi per garantire la funzionalità del progetto in futuro.
Se stai usando MySQL 5.0 e versioni successive, potresti provare:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Qualsiasi risultato indica che la tabella esiste.
Da: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Usando mysqli ho creato la 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 suggerito da @jcaron questa funzione potrebbe essere vulnerabile agli attacchi sqlinjection, quindi assicurati che la tua $table
var sia pulita o ancora meglio usa query parametrizzate.
Questo viene pubblicato semplicemente se qualcuno viene a cercare questa domanda. Anche se è stato risposto un po '. Alcune delle risposte lo rendono più complesso del dovuto.
Per mysql * ho usato:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
Nella DOP ho usato:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Con questo inserisco semplicemente la condizione else in o. E per i miei bisogni ho solo bisogno di morire. Sebbene tu possa impostare o ad altre cose. Alcuni potrebbero preferire il if / else if / else. Che è quindi rimuovere o e quindi fornire if / else if / else.
Ecco la mia soluzione che preferisco quando utilizzo le stored procedure. Funzione mysql personalizzata per verificare che la tabella esista 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
Poiché "Mostra tabelle" potrebbe essere lento su database più grandi, ti consiglio di utilizzare "DESCRIBE" e controlla se ottieni come risultato vero / falso
$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";
}
}
Quadro 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 il motivo per cui si desidera eseguire questa operazione è la creazione di una tabella condizionale, "CREA TABELLA SE NON ESISTE" sembra l'ideale per il lavoro. Fino a quando non l'ho scoperto, ho usato il metodo "DESCRIBE" sopra. Maggiori informazioni qui: MySQL "CREA TABELLA SE NON ESISTE" -> Errore 1050