Odpowiedzi:
Nie znam składni PDO dla tego, ale wydaje się to dość proste:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
funkcji, są one oficjalnie przestarzałe , nie są już obsługiwane i zostaną usunięte w przyszłości. Powinieneś zaktualizować swój kod za pomocą PDO lub MySQLi, aby zapewnić funkcjonalność swojego projektu w przyszłości.
Jeśli używasz MySQL 5.0 lub nowszego, możesz spróbować:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Wszelkie wyniki wskazują, że tabela istnieje.
Od: http://www.electrictoolbox.com/check-if-mysql-table-exists/
Używając mysqli stworzyłem następującą funkcję. Zakładając, że masz instancję mysqli o nazwie $ 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);
}
Mam nadzieję, że to pomoże.
Ostrzeżenie: jak sugeruje @jcaron, ta funkcja może być podatna na ataki sqlinjection, więc upewnij się, że twój $table
var jest czysty lub jeszcze lepiej użyj sparametryzowanych zapytań.
To jest publikowane po prostu, jeśli ktoś przyjdzie szukać tego pytania. Mimo że udzielono na to trochę odpowiedzi. Niektóre odpowiedzi sprawiają, że jest to bardziej skomplikowane, niż powinno.
Dla mysql * użyłem:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
W PDO użyłem:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
Dzięki temu po prostu wsuwam warunek else do lub. A dla moich potrzeb potrzebuję tylko umrzeć. Chociaż możesz ustawić lub na inne rzeczy. Niektórzy mogą preferować if / else if / else. Oznacza to usunięcie lub dostarczenie if / else if / else.
Oto moje rozwiązanie, które preferuję podczas korzystania z procedur składowanych. Niestandardowa funkcja mysql do sprawdzenia, czy tabela istnieje w bieżącej bazie danych.
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
Ponieważ funkcja „Pokaż tabele” może działać wolno w przypadku większych baz danych, zalecam użycie opcji „OPISUJ” i sprawdzenie, czy w rezultacie otrzymujesz wartość prawda / fałsz
$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";
}
}
Framework 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;
}
Jeśli powodem chęci wykonania tego jest warunkowe utworzenie tabeli, wówczas opcja „UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE” wydaje się idealna do tego zadania. Dopóki tego nie odkryłem, stosowałem powyższą metodę „DESCRIBE”. Więcej informacji tutaj: MySQL "UTWÓRZ TABELĘ, JEŚLI NIE ISTNIEJE" -> Błąd 1050