2012-10-03 30 views
2

这是我在这里的第一篇文章。我在网站上搜索过,但inforutunaly没有匹配。 无论如何,我想知道如何在一个类上使用命名参数。 所以pdo的基本形式是类似的。如何在php类上使用预准备语句(命名参数)

$query = $bdd->prepare('SELECT * FROM table WHERE login = :login AND pww = :pww'); 
$query->execute(array('login' => $login, 'pww' => $pww)); 

并且我想将它整合到一个类中,而不管参数的数量如何。 目前,我有这样的代码

http://pastebin.com/kKgSkaKt

和参数,我使用像出头(这是错误的,容易受到注射)

require_once 'classes/Mysql.class.php'; 
$mysql = new Mysql(); 
$sql = 'SELECT * FROM articles WHERE id = '.$_GET['id'].' LIMIT 1'; 
$data = $mysql->select($sql); 

和感谢。

+1

我不太明白问题或问题。 – deceze

+1

用于尝试使用PDO的+1 – JvdBerg

+0

为了澄清,您希望将sql查询传递给一个方法,该方法将解析字符串以从'where'子句获取用户输入并将其替换为'?',准备语句并绑定抓取的用户输入? – Leri

回答

0

因此,似乎我已经想通了,诀窍是给函数添加一个可选参数,当您需要使用预处理语句(命名参数)时使用它。 因此,功能是一样的东西

public function selectAll($reqSelect, $param = null) { 
       $result = parent::prepare($reqSelect); 
      //Check whether the parameter was passed or not 
       if (is_null($param)) { 
        $result->execute(); 
        $resultat = $result->fetchAll(); 
        return $resultat; 
       }else{ 
      //Binding the parameters 
        $result->execute($param); 
        $resultat = $result->fetchAll(); 
        return $resultat; 
       } 
       $result->closeCursor(); 
     } 

和应用它,它会像

//First param, the SQL. Here we have named parameters, so we need them to get bind 
$sql = 'SELECT * FROM articles WHERE publish = :number'; 
//Second param, the parameters that will get bind with the named ones 
    $param = array(':number' => 1); 

    $query = $mysql->selectAll($sql, $param); 

    foreach ($query as $row) { 
     extract($row); 
     echo $title . '<br />'; 
    } 

我不知道这一点,被认为是最好的做法,担保,甚至是正确的。如果我错了,随时纠正我。