Відповіді:
Я не знаю синтаксис PDO для цього, але це здається досить прямим:
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
mysql_*
функцій, вони офіційно застаріли , більше не підтримуються і будуть видалені в майбутньому. Ви повинні оновити свій код за допомогою PDO або MySQLi, щоб забезпечити функціональність вашого проекту в майбутньому.
Якщо ви використовуєте MySQL 5.0 та новіших версій, ви можете спробувати:
SELECT COUNT(*)
FROM information_schema.tables
WHERE table_schema = '[database name]'
AND table_name = '[table name]';
Будь-які результати вказують на існування таблиці.
Від: http://www.electrictoolbox.com/check-if-mysql-table-exists/
За допомогою mysqli я створив наступну функцію. Якщо припустити, що у вас є екземпляр mysqli, який називається $ 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);
}
Сподіваюся, це допомагає.
Попередження: як переконаний у @jcaron, ця функція може бути вразливою для вкладень sqlinjection, тому переконайтеся, що ваш $table
var чистий або навіть краще використовувати параметризовані запити.
Це розміщується просто, якщо хтось приходить шукати це питання. Незважаючи на те, що на нього відповіли трохи. Деякі відповіді роблять її складнішою, ніж це було потрібно.
Для mysql * я використав:
if (mysqli_num_rows(
mysqli_query(
$con,"SHOW TABLES LIKE '" . $table . "'")
) > 0
or die ("No table set")
){
У PDO я використовував:
if ($con->query(
"SHOW TABLES LIKE '" . $table . "'"
)->rowCount() > 0
or die("No table set")
){
З цим я просто підштовхую іншу умову до або. А для моїх потреб мені просто просто потрібно померти. Хоча ви можете налаштувати або на інші речі. Деякі можуть віддати перевагу if / else if / else. Що потім видалити або подати, якщо / else якщо / else.
Ось моє рішення, яке я віддаю перевагу під час використання збережених процедур. Спеціальна функція mysql для перевірки таблиці існує в поточній базі даних.
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
Оскільки "Показувати таблиці" може бути повільним на великих базах даних, я рекомендую використовувати "DESCRIBE" і перевірити, чи ви отримаєте true / false в результаті
$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;
}
Якщо причиною цього хочеться створити умовну таблицю, то "СТВОРИТИ ТАБЛИЦЮ, ЩО НЕ існує" ідеально підходить для роботи. Поки я не виявив цього, я застосував вищезгаданий метод 'DESCRIBE'. Більше інформації тут: MySQL "СТВОРИТИ ТАБЛИЦЮ, ЯКЩО НЕ існує" -> Помилка 1050