【问题标题】:How can i check for a table without errors being displayed如何在不显示错误的情况下检查表格
【发布时间】:2013-03-11 11:29:24
【问题描述】:

我想检查 OpenCart 数据库中的表是否存在所以我做了这个函数

public function CheckCustomer(){
$query = $this->db->query('SELECT * FROM '.DB_PREFIX.'customer_online');
return $query->row;
}

在我的控制器中,我测试它是否存在,我根据情况将变量设置为 1 或 0。

表确实存在,一切都很好,如果我从客户那里删除 c 只是为了模拟表不存在,我的 tpl 页面没有呈现,而是出现此错误:

注意:错误:表“OpenCart-Test.oc_ustomer_online”不存在 错误编号:1146 SELECT * FROM oc_ustomer_online in /home/justine/www/opencart-test/opencart-1.5.5.1/upload/system/database/mysql.php 在第 50 行

是否有这样做而不会在屏幕上抛出错误,因为我需要在我的 tpl 文件中显示某些信息之前知道该表是否存在。

希望有人能对此有所了解。

【问题讨论】:

标签: php mysql opencart


【解决方案1】:

一般来说动态创建的表是个坏主意。您需要的任何表都应该始终存在,并且您可以简单地使用TRUNCATE TABLE mytable 而不是DROP TABLE 来快速删除所有行。

编辑:比下面更好的主意
将查询更改为SHOW TABLES FROM my_database [或者如果已选择数据库,则只需SHOW TABLES] 并检查您要查找的表名是否存在于结果集中。


也就是说,您应该能够通过在函数前加上@ 来抑制错误,即:

$query = @$this->db->query('SELECT * FROM '.DB_PREFIX.'customer_online');

或者您应该能够将您的 mySQL 数据库对象切换为使用异常而不是 PHP 错误,然后将函数调用包含在 try{ } catch() { } 块中。

【讨论】:

  • 对不起,没用。我需要测试的原因是 Opencart 1.54 之前的早期版本没有 table customer_online 。
  • @JustineSmithies 使用在 OpenCart 中声明的 VERSION var 而不是调用已弃用的函数可能会更好。
【解决方案2】:

已解决。

把它放在我的控制器文件中修复它。

$this->data['checkcustomer'] = @mysql_query ('SELECT * FROM '.DB_PREFIX.'customer_online');

【讨论】:

    【解决方案3】:

    MySQL 可以列出数据库中的所有表。通过指定“like tablename”,您可以搜索特定的表。

    /**
     * Check if the table 'customer_online' exists
     * @return boolean TRUE if table exists, FALSE otherwise.
     */
    public function CheckCustomer(){
        $res = $this->db->query("SHOW TABLES LIKE '".DB_PREFIX."customer_online'");
        return (boolean) $res->num_rows;
    }
    

    这不会产生任何错误,因为它没有尝试访问表,只是在数据库的表列表中查找表名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多