2013-04-09 33 views
1

是否有可能爲PDO構建動態查詢?PDO - 動態查詢大廈

說明:
我有以下功能:
功能

saveContent($roundId,$answer,$question_de,$question_en,$files_1_1,$files_1_2,$files_2_1,$files_2_2,$files_3_1,$files_3_2) { 

     $sql_pictures = " 
      UPDATE ".DBPREFIX."pictures 
      SET 
       file_1_static=:files_1_1, 
       file_1_animation=:files_1_2, 
       file_2_static=:files_2_1, 
       file_2_animation=:files_2_2, 
       file_3_static=:files_3_1, 
       file_3_animation=:files_3_2 
      WHERE 
       roundId=:roundId"; 
     try { 
      $db = self::getConnection(); 
      $stmt_pictures = $db->prepare($sql_pictures); 

      $stmt_pictures->bindParam("roundId", $roundId); 
      $stmt_pictures->bindParam("files_1_1", $$question_de); 
      $stmt_pictures->bindParam("files_1_2", $question_en); 
      $stmt_pictures->bindParam("files_2_1", $roundId); 
      $stmt_pictures->bindParam("files_2_2", $$question_de); 
      $stmt_pictures->bindParam("files_3_1", $question_en); 
      $stmt_pictures->bindParam("files_3_2", $question_en); 

      $stmt_pictures->execute(); 
      $db = null; 
      return true; 
     } catch(PDOException $e) { 
      echo $e->getMessage(); 
     } 

    } 

的重要組成部分,是 「sql_pictures」。我通過將必要的數據到函數,這樣調用這個函數:

if (isset($_POST['save'])) {   
      $saveContent = $helper->saveContent(
       $_POST['roundId'], 
       $_POST['answer'], 
       $_POST['question_de'], 
       $_POST['question_en'], 
       $_FILES["files_1_1"], 
       $_FILES["files_1_2"], 
       $_FILES["files_2_1"], 
       $_FILES["files_2_2"], 
       $_FILES["files_3_1"], 
       $_FILES["files_3_2"] 
      ); 
     } 

你們有些人也許注意到了,它是一個多文件上傳。
現在的主要問題是,當字符串爲空(未設置)或值未更改(即$ files_1_1未更改或爲空)時,我不想更新字段。

我該如何做到這一點?

其他問題:
是否可能更好地使用的

<input type="file" name="files[]" id="file" /> 

代替

<input type="file" name="files_1_2" id="file" /> 

每個輸入字段?
那麼我該如何重構函數呢?我坐了好幾個小時,但沒有線索。一個提示會很好! :)

謝謝!

回答

0

對於插入/更新查詢動態查詢構建是非常簡單的任務。只需創建一個數組,其中的鍵名等於字段名和相應的值,然後在循環中處理它們。

我不想更新域時,無論是字符串爲空(未設置)或價值沒有改變

最後一個無關緊要。如果價值沒有改變 - 它也不會在表格中改變。
對於其他值,創建一個具有適合您的值(即不爲空)的數組,然後使用助手函數動態創建SET語句。您可以使用一個從PDO tag wiki例如

其他問題:

我個人更喜歡files_1, files_2, files_3...方式,因爲它讓我用簡單的foreach遍歷數組$_FILES

+0

Great-謝謝。做到了這一點,它工作正常! – Marek123 2013-04-09 13:00:08