2013-04-09 60 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