EC-CUBEでDBアクセスしてselectする

http://www.omnioo.com/record/ec-cube/sc_query-insert-update-delete/
でいろいろ書いてみたんですが、SC_Query()からselectしたりするのがよいのか悪いのかわからないのですが、なんか動かない時があります。全然調査していないんですが、隣のSHIMAGIE氏に訊いたら「SC_Query_Ex::getSingletonInstance();使うんすよ」的なこと教えてもらったのでメモ。どれが正しいのかよくわからないけど、where句を使う場合は更に変という印象。
やり方としては、
$objQuery = & SC_Query_Ex::getSingletonInstance();
$where = 'email = ?';
$whereVal = array('sample@example.com');
$arr = $objQuery->select('customer_id','dtb_customer',$where,$whereVal);
$custmer_id = $arr[0]['customer_id'];

ということになっていて、SC_Query_Ex::getSingletonInstance()を呼ぶ。PHPでは珍しい&を付けた参照渡しっていうやつです。値をコピーしないで参照するというやつでエイリアスなのかな。で、where句なのですが?マークでもって後に続く配列の値を代入するっぽいです。$whereValに入ってきた値をバインド変数的に$where句に入れ込んでゆくみたいで、上記の例だと結果$where = 'email = sample@example.com'という風に展開されるっぽい
$objQuery->select('[対象のカラム]','[テーブル名]',[whereのカラムの値],[whereの値]);
なので、会員テーブルを見にいってEmailはユニークになっているので、メールアドレスでwhereしてselectするとその会員さんの会員IDが取得できるということになっています。
これで何とかうまく動いた感じ。