web-dev-qa-db-ja.com

MySQLは、例外をスローせずにテーブルが存在するかどうかをチェックします

例外をスローせずに、MySQLにテーブルが存在するかどうかを確認する最良の方法は何ですか(PHPのPDOを使用することをお勧めします)。 「SHOW TABLES LIKE」などの結果を解析する気はありません。何らかのブールクエリが必要ですか?

121
clops

PDOの構文はわかりませんが、これは非常に簡単です。

$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
198
nickf

MySQL 5.0以降を使用している場合は、次を試すことができます。

SELECT COUNT(*)
FROM information_schema.tables 
WHERE table_schema = '[database name]' 
AND table_name = '[table name]';

結果があれば、テーブルが存在することを示します。

From: http://www.electrictoolbox.com/check-if-mysql-table-exists/

39
Michael Todd

Mysqliを使用して、次の関数を作成しました。 $ conというmysqliインスタンスがあると仮定します。

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 attacsに対して脆弱である可能性があるため、$table変数がクリーンであるか、パラメーター化されたクエリを使用することを確認してください。

8
Falk

誰かがこの質問を探しに来た場合、これは単に投稿されます。少し答えられたとしても。返信のいくつかは、必要以上に複雑にしています。

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")
   ){

これでelse条件をorにプッシュするだけです。そして、私のニーズのために私は単に死ぬ必要があるだけです。設定することもできますが、他のこともできます。 if/else if/elseを好む人もいるかもしれません。次に、削除するか、if/else if/elseを指定します。

3
Esoterica

以下は、ストアドプロシージャを使用する際に私が好むソリューションです。テーブルを確認するためのカスタム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
3
erandac

大規模なデータベースでは「表の表示」が遅い場合があるため、「DESCRIBE」を使用して、結果としてtrue/falseを取得するかどうかを確認することをお勧めします

$tableExists = mysqli_query("DESCRIBE `myTable`");
2
Martin Lisicki