2013-03-05 92 views
0

我試圖正確地將參數綁定到下面的Function的語句。我正在傳遞一個關聯數組,value=>datatypePDO和綁定動態關聯數組參數

我得到一個錯誤,但在嘗試這樣的:Notice: Undefined offset: 0 in db.class.php on line 69 Notice: Undefined offset: 1 in db.class.php on line 69

69號線是在Function

for行如何解決這個問題?和/或者我應該像這樣做呢?

這裏的Function

protected function ConvertParams($stmt, $params){ 
    $parrs = $params; 
    if(is_array($parrs)){ 
     $parrCt = count($parrs); 
     echo '<pre>'; 
     print_r($parrs); 
     echo '</pre>'; 
     echo '<hr />'; 
     for($i = 0; $i < $parrCt; ++$i){ 
      switch ($parrs[$i][1]){ 
       case 'string': 
        $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_STR); 
        break; 
       case 'int': 
        $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_INT); 
        break; 
       case 'boolean': 
        $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_BOOL); 
        break; 
       case 'lob': 
        $stmt->bindParam($i + 1, $parrs[$i][0], PDO::PARAM_LOB); 
        break; 
       default: 
        $stmt->bindParam($i + 1, $parrs[$i][0]); 
      } 
     } 
    } 
} 

這裏的array

$db->Params = array('%a%'=>'string', '%Welcome%'=>'string'); 

請假設我連接到數據庫正確,並且該查詢正確執行(減去這個bindParam問題)。

+0

你可以請示例代碼的地方使用此功能? – 2013-03-05 13:57:23

回答

0

你並不需要在所有既不是 「結合之有道」,也不全這個功能。 只是傳遞參數數組直接執行:

$params = array('%a%', '%Welcome%'); 
$stmt->execute($params); 

將大大縮短你的代碼沒有任何缺點。

請保持您的代碼清潔和簡單。
無用的複雜化將使它很難支持和維護。

+0

'無用的複雜化將使它很難支持和維護。=我同意,我來自一個經典的ASP背景,所以我認爲參數化將是正確的做法。是否有任何挫折做你如何張貼? – Kevin 2013-03-05 14:19:18

+2

我已知的** only **案例在''PDO prepared statements and LIMIT''標題下的[pdo tag wiki](http://stackoverflow.com/tags/pdo/info)中列出。 – 2013-03-05 14:22:36

0

我的第一篇文章...我可能在這裏錯了,但我相信沒有[0]或[1]索引的$ parrs,因爲你正在傳遞它的命名索引'%a%'和' %歡迎%'。

您可以嘗試分別用%a%和%Welcome%替換[0]和[1],或者對數組使用數字索引。

+0

它是我需要的方式...價值=>數據類型 – Kevin 2013-03-05 14:20:08

+0

我並不是說你必須改變你的數組。但是如果數組沒有數字索引,則不能引用[0]。通過其指定的索引來調用它,或者根據我的鏈接獲取數字索引。感謝您的閱讀並給我一個-1 – 2013-03-05 14:33:21

+0

+因爲這是(雖然太直接了),但正確的答案 – 2013-03-05 14:39:52