【问题标题】:MySQLi query about Is Empty Table Or Not?MySQLi 查询是否为空表?
【发布时间】:2012-06-09 08:08:49
【问题描述】:

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

// 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 或其他什么?谢谢。

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

$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();

[2012 年 6 月 9 日星期六 11:25:34] [错误] [客户端 127.0.0.1] PHP 致命错误: 调用未定义的方法 mysqli_stmt::fetch_row() F:\server\sites\home\test.loc\www\empty.php 在第 9 行

更新:

$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();

就是这样。

【问题讨论】:

  • 我不认为你可以像这样轻松地准备一个表的名称。
  • 我仍然需要一个解决方案,我找不到完整的示例。这在 mysql 而不是 mysqli 中似乎很容易。
  • 表名是否有害?它来自用户吗?
  • 不,但谁知道..你知道..我解决了。等待更新。

标签: php mysqli


【解决方案1】:

COUNT(*) 可以很好地确定表是否为空,前提是该表没有大量行。

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

但是你确定可以通过类似 mysqli 中的参数来设置表名吗?我认为不是,需要检查。

【讨论】:

  • @Artefact2 错误,SELECT COUNT(*) LIMIT 1 将返回与SELECT COUNT(*) 相同的结果,不是吗? (即我认为 LIMIT 在 COUNT(*) 之后应用)。再次,我需要检查(这是漫长的一天!)
  • 啊,是的,你是对的,很抱歉。那么,只需一个简单的“SELECT * LIMIT 1”就可以了。
猜你喜欢
  • 2014-02-11
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 2019-07-20
  • 1970-01-01
  • 2011-02-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多