0

我正在使用 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。

4

1 回答 1

0

事实上,这个类是完全无法使用的。你提到的问题至少是一个。似乎写它的人从未在现实生活中的项目中使用过这个类。

因此,如果您想要一个更好的工作和工作方式的类,请选择SafeMysql,因为它会完全满足您的要求:

$data = $db->getAll("SELECT * FROM `users` WHERE status = 'y'");

(请注意,您已经获得了数据,无需任何进一步的代码)

尽管如此,您必须了解您的以下陈述

我不需要参数,因为查询从类中的安全源获取它的值。

是错的。
在编写时使用硬编码值是可以的,但如果您打算使用“安全”变量- 它应该通过占位符添加。否则,您的查询仍然容易出错且不安全。

所以,它必须是

$id = 1; // "safe" variable
$data = $db->getRow("SELECT * FROM `users` WHERE id = ?i", $id);

回答编辑的问题。不确定它是否是您需要的,但这是代码。它吴

if($HC == 'C')
{
    $sql  = "SELECT * FROM `photo_c` WHERE `user` = ?i AND `pic` != ?s AND cat != 'D' GROUP BY pic  LIMIT ?";
    $data = $this->dbs->getAll($sql,$this->user,$this->user_head,4);
    if (count($data) < 3) {
        $sql = "SELECT * FROM `photo` WHERE `user` = ?i AND `pic` != ?s ORDER BY  id ASC LIMIT ?";
        $data = $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 ?";
    $data = $this->dbs->query($sql,$this->user,$this->user_head,$HC,4);
}
于 2013-04-01T05:48:03.057 回答