2012-07-12 29 views
2

問:是否有更容易/更安全的方式在Fat Free Framework中運行更復雜的SQL查詢。我擁有的解決方案是使用PDO,但由於我不能輕易拋出異常,所以它很雜亂,很難看。無脂肪:使用複雜的SQL查詢

背景:

脂肪免費提供的數據庫的「安全」操縱軸突類,但我想做一個更復雜的查詢AXON可以處理。

數據庫類是公開的,但我需要求助於「mysql_real_escape_string()」來構建不能保證安全的查詢。所以解決方案似乎在使用暴露的PDO。

作爲默認錯誤處理的公開PDO,這是一個痛苦,並導致醜陋的代碼。

 $pdo = F3::get('DB')->pdo; 
     $sql = 'INSERT INTO config(config_name, config_value, comments) VALUES(:config_name , :config_value , :config_comments) 
        ON DUPLICATE KEY UPDATE config_value= :config_value2'; 
     if (!$stmt = $pdo->prepare($sql)) { 
      $errorInfo = $pdo->errorInfo(); 
      trigger_error('PDO Error: ' . $pdo->errorCode(). ' ' . $errorInfo[2]); 
      exit(); 
     } 

     $stmt->bindValue(':config_name', $field, PDO::PARAM_STR); 
     $stmt->bindValue(':config_value', $value, PDO::PARAM_STR); 
     $stmt->bindValue(':config_comments', $comments, PDO::PARAM_STR); 
     $stmt->bindValue(':config_value2', $value, PDO::PARAM_STR); 
     if ($stmt->execute() === false) { 
      $errorInfo = $stmt->errorInfo(); 
      trigger_error('PDO Error: ' . $stmt->errorCode(). ' ' . $errorInfo[2]); 
      exit(); 
     } 

那麼有什麼東西整潔我失蹤了嗎?或者AXON能否處理更復雜的查詢?

回答

2

你看過DB對象並編寫參數化查詢嗎?您可以view the docs here,並將其下拉至參數化查詢。

這比直接與PDO混淆一點。

DB::sql(
    'SELECT * FROM users WHERE userID=:uID', 
    array(':uid'=>array(F3::get('POST.userID'),PDO::PARAM_INT)) 
); 
+0

謝謝。是的,我做過了 - 但是我放棄了它,因爲您剛纔提醒我爲什麼我必須首先參加PDO:我想要準備好重複更新的聲明,然後我複製了其他查詢的代碼。我將更改爲數據庫版本,因爲我不需要它。 – Robbie 2012-07-12 02:13:32