我想检查一下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文件中显示某些信息之前表是否存在。
希望有人可以对此有所了解。
答案 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;
}
这不会产生任何错误,因为它不会尝试访问表,只是在数据库的表列表中查找表名。