例外をスローせずに、MySQLにテーブルが存在するかどうかを確認する最良の方法は何ですか(PHPのPDOを使用することをお勧めします)。 「SHOW TABLES LIKE」などの結果を解析する気はありません。何らかのブールクエリが必要ですか?
PDOの構文はわかりませんが、これは非常に簡単です。
$result = mysql_query("SHOW TABLES LIKE 'myTable'");
$tableExists = mysql_num_rows($result) > 0;
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/
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
変数がクリーンであるか、パラメーター化されたクエリを使用することを確認してください。
誰かがこの質問を探しに来た場合、これは単に投稿されます。少し答えられたとしても。返信のいくつかは、必要以上に複雑にしています。
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を指定します。
以下は、ストアドプロシージャを使用する際に私が好むソリューションです。テーブルを確認するためのカスタム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`");