MySQL检查表是否存在而不抛出异常

时间:2009-10-06 14:00:35

标签: php mysql pdo database

检查MySQL中是否存在表(最好是通过PHP中的PDO)而不抛出异常的最佳方法是什么。我不想解析“SHOW TABLES LIKE”的结果等等。必须有某种布尔查询吗?

10 个答案:

答案 0 :(得分:198)

我不知道它的PDO语法,但这看起来很简单:

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

答案 1 :(得分:39)

如果您使用的是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/

答案 2 :(得分:8)

使用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 attac的攻击,因此请确保您的$table var干净或甚至更好地使用参数化查询。

答案 3 :(得分:3)

这是我在使用存储过程时更喜欢的解决方案。自定义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

答案 4 :(得分:3)

如果有人来寻找这个问题,这个帖子很简单。虽然它得到了一点回答。一些回复使它变得比它需要的更复杂。

对于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。然后删除或然后提供if / else if / else。

答案 5 :(得分:2)

作为"显示表格"在较大的数据库上可能会很慢,我建议使用" DESCRIBE"并检查你是否得到真/假

$tableExists = mysqli_query("DESCRIBE `myTable`");

答案 6 :(得分:-1)

$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";
    }
}

答案 7 :(得分:-1)

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;

    }

答案 8 :(得分:-1)

如果想要这样做的原因是条件表创建,那么'CREATE TABLE IF NOT EXISTS'似乎是这项工作的理想选择。在我发现这个之前,我使用了上面的'DESCRIBE'方法。更多信息:MySQL "CREATE TABLE IF NOT EXISTS" -> Error 1050

答案 9 :(得分:-9)

为什么你这么难以理解?

function table_exist($table){ 
    $pTableExist = mysql_query("show tables like '".$table."'");
    if ($rTableExist = mysql_fetch_array($pTableExist)) {
        return "Yes";
    }else{
        return "No";
    }
}