0

我想检查 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。第 50 行的 php

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

希望有人可以对此有所了解。

4

3 回答 3

0

一般来说,动态创建的表是一个坏主意。您需要的任何表都应该始终存在,并且您可以简单地使用它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() { }块中。

于 2013-03-21T19:26:04.160 回答
0

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

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

于 2014-08-08T14:39:30.403 回答
0

解决 。

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

$this->data['checkcustomer'] = @mysql_query ('SELECT * FROM '.DB_PREFIX.'customer_online');
于 2013-03-21T20:21:03.157 回答