パラメータ化されたクエリを実行するためにMertol Kasananのクラスを使用しています-
http://liveplanet.googlecode.com/svn-history/r132/trunk/db/DB.php
指を置いていないように見えるいくつかの問題を除いて、スクリプトに非常に満足しています。クラスの説明の簡単なチュートリアルで述べているように、クエリを実行する方法は次のとおりです。
$result = $db->query('SELECT * FROM `users` WHERE id = ? AND user_type = ? LIMIT ?',$id,$user_type,$limit);
パラメータを定義せずにクエリを実行する方法を誰でも理解できますか?
$result = $db->query('SELECT * FROM `users` WHERE id = 'y' ");
ない
$result = $db->query('SELECT * FROM `users` WHERE id = 'y' ", '');
バインド エラーが返されるため、このトリックを実行しないでください。回避策は
$result = $db->query('SELECT * FROM `users` WHERE 1 = ? AND id = 'y' ", 1);
クエリを実行するためのより適切な方法はありますか? クエリはクラス内の安全なソースから値を取得するため、パラメーターは必要ありません。
編集:
私がこれを持っているとしましょう:
if($HC == 'C'){
$sql = "SELECT * FROM `photo_c` WHERE `user` = ?i AND `pic` != ?s AND cat != 'D' GROUP BY pic LIMIT ?";
$query = $this->dbs->query($sql,$this->user,$this->user_head,4);
$results = $this->dbs->numRows($query);
if($results < 3){
$sql = "SELECT * FROM `photo` WHERE `user` = ?i AND `pic` != ?s ORDER BY id ASC LIMIT ?";
$query = $this->dbs->query($sql, $this->user,$this->user_head,4);
}
}else{
$sql = "SELECT * FROM `photo_c` WHERE `user` = ?i AND `pic` != ?s AND cat = ?s ORDER BY RAND() LIMIT ?";
$query = $this->dbs->query($sql,$this->user,$this->user_head,$HC,4);
$results = $this->dbs->numRows($query);
}
ここで、正しいクエリからデータを取得するために、各クエリの下で $data->getAll を定義することができますが、それはコードを繰り返すことを意味するか、最後に定義された $query の結果からデータを抽出することを試みることができます。やり方がわからない。これを行うためのより良い方法があるかもしれないことは知っていますが、コーディング スタイルを改善しようとしています。$db->query の代わりに $db->getAll を使用することもできますが、私の知る限り、GetAll で numRows を使用することはできません。