1

是否有可能为 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" />

每个输入字段?
那么我该如何重构这个函数呢?我坐在上面好几个小时,但没有任何线索。一个提示会很好!:)

谢谢!

4

1 回答 1

0

对于插入/更新查询,动态查询构建是非常简单的任务。只需创建一个键名等于字段名和相应值的数组,然后在循环中处理它们。

当字符串为空(未设置)或值未更改时,我不想更新字段

最后一个无关紧要。如果值没有改变 - 它也不会在表中改变。
对于其他值,创建一个包含适合您的值的数组(即非空),然后使用辅助函数动态创建 SET 语句。例如,您可以使用PDO 标签 wiki中的一个

其他问题:

就我个人而言,我更喜欢files_1, files_2, files_3...这种方式,因为它让我可以使用简单的 foreach 遍历$_FILES数组

于 2013-04-09T10:37:11.340 回答