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. php 50行目

tplファイルに特定の情報を表示する前にテーブルが存在するかどうかを知る必要があるため、画面にエラーをスローせずにこれを行う方法はありますか.

誰かがこれに光を当ててくれることを願っています。

4

3 に答える 3

0

一般的に言えば、動的に作成されたテーブルは悪い考えです。必要なテーブルは常に存在する必要がありTRUNCATE TABLE mytableDROP TABLE.

編集: 以下よりもはるかに優れたアイデア
クエリをSHOW TABLES FROM my_database[または単にSHOW TABLESデータベースが既に選択されている場合] に変更し、探しているテーブル名が結果セットに存在するかどうかを確認します。


つまり、関数の前に を付けることでエラーを抑制できるはずです。つまり、次のようになります@

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

または、PHP エラーではなく例外を使用するように mySQL データベース オブジェクトを切り替えてから、関数呼び出しをtry{ } catch() { }ブロックで囲むことができるはずです。

于 2013-03-21T19:26:04.160 に答える
0

解決しました。

これをコントローラーファイルに入れると修正されました。

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