2012-10-03 55 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 />'; 
    } 

我不知道這一點,被認爲是最好的做法,擔保,甚至是正確的。如果我錯了,隨時糾正我。