如何压缩PHP和SQL语句


How to cunstruct PHP and SQL statement compact

如何更容易地构造if and if-else子句(compact)?在我的第一条SQL语句中,值"ticket"不是由绑定参数设置的,因为它不起作用。我不知道为什么。在其余的SQL语句中,绑定参数非常有效。

我想要的很简单。如果这个列名为空,我将把PIC名称保存在DB中,如果不是,则转到下一个列名。。。。等等

        if (empty($file->error)) {
    /* get values from db for pic rows */
        $sql = 'SELECT bild1, bild2, bild3, bild4, bild5, bild6 FROM '.$this->options['db_table'].' WHERE `ticket`=?';
        $result = $this->db->prepare($sql);
        $row = $result->fetch_assoc();
    /* save pic names 1-6 to db */ 
        if (empty($row["bild1"])) {
        $sql = 'UPDATE `'.$this->options['db_table'].'` SET `bild1`=? WHERE `ticket`=? AND bild1 IS NULL';
        $query = $this->db->prepare($sql);
        $query->bind_param('ss', $file->name, $this->options['ticket']);
        $query->execute();
        }
        elseif (empty($row["bild2"])) {
        $sql = 'UPDATE `'.$this->options['db_table'].'` SET `bild2`=? WHERE `ticket`=? AND bild2 IS NULL';
        $query = $this->db->prepare($sql);
        $query->bind_param('ss', $file->name, $this->options['ticket']);
        $query->execute();
        }
        elseif (empty($row["bild3"])) {
        $sql = 'UPDATE `'.$this->options['db_table'].'` SET `bild3`=? WHERE `ticket`=? AND bild3 IS NULL';
        $query = $this->db->prepare($sql);
        $query->bind_param('ss', $file->name, $this->options['ticket']);
        $query->execute();
        }
        elseif (empty($row["bild4"])) {
        $sql = 'UPDATE `'.$this->options['db_table'].'` SET `bild4`=? WHERE `ticket`=? AND bild4 IS NULL';
        $query = $this->db->prepare($sql);
        $query->bind_param('ss', $file->name, $this->options['ticket']);
        $query->execute();
        }
        elseif (empty($row["bild5"])) {
        $sql = 'UPDATE `'.$this->options['db_table'].'` SET `bild5`=? WHERE `ticket`=? AND bild5 IS NULL';
        $query = $this->db->prepare($sql);
        $query->bind_param('ss', $file->name, $this->options['ticket']);
        $query->execute();
        }
        elseif (empty($row["bild6"])) {
        $sql = 'UPDATE `'.$this->options['db_table'].'` SET `bild6`=? WHERE `ticket`=? AND bild6 IS NULL';
        $query = $this->db->prepare($sql);
        $query->bind_param('ss', $file->name, $this->options['ticket']);
        $query->execute();
        }
        // $file->id = $this->db->insert_id;
    }

使用for循环遍历所有bild数字,并在匹配时中断:

for($i = 1; $i <= 6; $i++) {
    if (empty($row["bild".$i])) {
        $sql = 'UPDATE `'.$this->options['db_table'].'` SET `bild'.$i.'`=? WHERE `ticket`=? AND bild'.$i.' IS NULL';
        $query = $this->db->prepare($sql);
        $query->bind_param('ss', $file->name, $this->options['ticket']);
        $query->execute();
        // Break out of the loop, so no other bildx whill be tried
        break;
    }
}