MySQLi查询是否为空表?

时间:2012-06-09 08:08:49

标签: php mysqli

我试图知道某些表是空的还是没有,现在我用这段代码意识到了这个问题:

// if table is empty it must return TRUE, if full FALSE

private function isEmpty($tableName)
{

    if ($result = $this->mysqli->prepare("SELECT COUNT(*) FROM ?"))
    {

            $result->bind_param("s",$tableName);
            $result->execute();
            $row_cnt = $result->num_rows;

            if (empty($row_cnt))
            {

                    return TRUE;

            }
            else
            {

                    return FALSE;

            }

    }

}

这段代码似乎不是很完美,我想知道是否有更好的方法来获得相同的结果,但使用谓词 SQL EXISTS 或其他什么?谢谢。

更新 感谢您的评论和回答,但无论如何我不知道怎么做,这称之为错误:

$mysqli = new mysqli("localhost","root","","database");

if ($result = $mysqli->prepare("SELECT COUNT(*) FROM `talbe` LIMIT 1"))
{

    $row = $result->fetch_row();

    echo "<pre>";
    print_r($row);
    echo "</pre>";

    $result->close();

}
$mysqli->close();
  

[Sat Jun 09 11:25:34 2012] [错误] [client 127.0.0.1] PHP致命错误:   调用未定义的方法mysqli_stmt :: fetch_row()in   第9行的F:\ server \ sites \ home \ test.loc \ www \ empty.php

更新

$mysqli = new mysqli("localhost","root","","db");

if ($result = $mysqli->query("SELECT * FROM `table` LIMIT 1"))
{

    if ($obj = $result->fetch_object())
    {

        echo "NOT EMPTY";

    }
    else
    {

        echo "empty";

    }


    $result->close();

}
$mysqli->close();

就是这样。

1 个答案:

答案 0 :(得分:1)

COUNT(*)可以确定某个表是否为空,前提是该表没有大量的行。

另一种选择是SELECT (something) FROM ${table} LIMIT 1;如果返回结果,那么表格就不会为空。

但是你确定可以通过mysqli中的参数设置表名吗?我没想到,需要检查。