如何检查表格而不显示错误

时间:2013-03-21 19:19:35

标签: php mysql opencart

我想检查一下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 第50行/home/justine/www/opencart-test/opencart-1.5.5.1/upload/system/database/mysql.php中的SELECT * FROM oc_ustomer_online

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

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

3 个答案:

答案 0 :(得分:0)

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

编辑:比下面更好的想法
如果已经选择了数据库,则将查询更改为SHOW TABLES FROM my_database [或简单地SHOW TABLES],并检查结果集中是否存在您要查找的表名。


那就是说,你应该能够通过在@前面添加函数来抑制错误,即:

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

或者您应该能够将mySQL数据库对象切换为使用Exceptions而不是PHP Errors,然后将函数调用括在try{ } catch() { }块中。

答案 1 :(得分:0)

已解决。

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

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

答案 2 :(得分: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;
}

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