回答:
その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を使用して、次の関数を作成しました。$ 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
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")
){
これで、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`");
$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フレームワーク
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;
}
これを実行する理由が条件付きテーブルの作成である場合は、「CREATE TABLE IF NOT EXISTS」がジョブに最適であると思われます。これが見つかるまで、上記の「DESCRIBE」方式を使用しました。詳細はこちら:MySQL "CREATE TABLE IF NOT EXISTS"->エラー1050