如何更容易地构造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;
}
}