如何检查PHP是否存在MySQL表?

2022-08-30 11:34:24

理论上听起来很简单,我已经做了相当多的研究,但很难弄清楚这一点。

我如何检查MySQL表是否存在以及它是否确实执行了某些操作。(我想一个简单的php if/else语句可以解决这个问题)

有没有办法做到这一点?

这就是我对cwallenpoole的回应所做的:

mysql_connect("SERVER","USERNAME","PASSWORD");
mysql_select_db('DATABASE');

$val = mysql_query('select 1 from `TABLE`');

if($val !== FALSE)
{
   print("Exists");
}else{
   print("Doesn't exist");
}

答案 1
// Select 1 from table_name will return false if the table does not exist.
$val = mysql_query('select 1 from `table_name` LIMIT 1');

if($val !== FALSE)
{
   //DO SOMETHING! IT EXISTS!
}
else
{
    //I can't find it...
}

诚然,它比PHP习语更Pythonic,但另一方面,您不必担心处理大量额外数据。

编辑

因此,在我写此消息时,此答案至少被标记了两次。假设我犯了一些巨大的错误,我去运行了一些基准测试,这就是我发现的,当表不存在时,我的解决方案比最近的替代方案快10%以上,当表确实存在时,它快25%以上:

:::::::::::::::::::::::::BEGINNING NON-EXISTING TABLE::::::::::::::::::::::::::::::
23.35501408577 for bad select
25.408507823944 for select from schema num rows -- calls mysql_num_rows on select... from information_schema.
25.336688995361 for select from schema fetch row -- calls mysql_fetch_row on select... from information_schema result
50.669058799744 for SHOW TABLES FROM test
:::::::::::::::::::::::::BEGINNING EXISTING TABLE::::::::::::::::::::::::::::::
15.293519973755 for good select
20.784908056259 for select from schema num rows
21.038464069366 for select from schema fetch row
50.400309085846 for SHOW TABLES FROM test

我尝试针对DESC运行此程序,但在276秒后超时(我的答案为24秒,276秒无法完成对不存在的表的描述)。

为了更好地衡量,我正在对一个只有四个表的模式进行基准测试,这是一个几乎新鲜的MySQL安装(这是迄今为止唯一的数据库)。要查看导出,请查看此处

此外

这个特定的解决方案也更加独立于数据库,因为相同的查询将在PgSQL和Oracle中工作。

最后

mysql_query()对于不是“此表不存在”的错误,返回 FALSE。

如果您需要保证该表不存在,请使用获取错误代码并将其与相关的MySQL错误进行比较。mysql_errno()


答案 2

在 PHP 中实现这一点的最简洁方法是简单地使用 DESCRIBE 语句。

if ( mysql_query( "DESCRIBE `my_table`" ) ) {
    // my_table exists
}

我不确定为什么其他人会为这样一个直截了当的问题发布复杂的查询。

更新

使用 PDO

// assuming you have already setup $pdo
$sh = $pdo->prepare( "DESCRIBE `my_table`");
if ( $sh->execute() ) {
    // my_table exists
} else {
    // my_table does not exist    
}

推荐