我正在使用 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 结果中提取数据 - 我这样做不知道怎么办。我知道可能有更好的方法来做到这一点,但我正在努力改进我的编码风格,因为我认为 safemysql 类需要一些改进,即使这意味着更多的文档。我可以尝试使用 $db->getAll 而不是 $db->query,但据我所知,我不能在 GetAll 上使用 numRows。