动态PDO mysql更新

时间:2014-03-18 19:17:03

标签: php mysql pdo

我有一个包含许多可选字段的表单。我正在使用PHP和PDO从表单中收集数据并将其存储在数据库中。

由于某些可选字段可能为空,我只想存储实际具有值的输入。我可以很容易地识别具有价值的输入,但是如果不使用大量的IF语句,我似乎无法找到一种方法,只有在存在的情况下才能将值插入数据库。

我目前的PDO看起来像这样:

$data = array($var1, $var2, $var3, $var4, $var5, $var6);

$STH = $DBH->("INSERT INTO users (first, last, addr, city, email, phone) values (?, ?, ?, ?, ?, ?)";
$STH->execute($data);

如果数组中的值存在,是否只能更新列? 示例:如果$ var3和$ var4为空,则数据库中不会存储任何内容,因为" addr"和"城市"?

2 个答案:

答案 0 :(得分:0)

对于那里的任何其他noob,只要你的mysql行允许为null,就可以接受将空值插入数据库。您可能还希望为它们提供默认值null。

见这篇文章:
MySQL, better to insert NULL or empty string?

感谢大家的帮助。

答案 1 :(得分:-1)

理想情况下,您要将表设置为不允许这些字段的空值。否则,在PHP端,您只需检查值是否已设置且不为空:

if (isset($var1, $var2, $var3, $var4, $var5, $var6)) {
  $data = array($var1, $var2, $var3, $var4, $var5, $var6);
  $STH = $DBH->("INSERT INTO users (first, last, addr, city, email, phone) values (?, ?, ?, ?, ?, ?)";
  $STH->execute($data);
}

除非您还想插入?在这种情况下,只需将值初始化为空字符串或其他:

$data = array($var1?:"", $var2?:"", $var3?:"", $var4?:"", $var5?:"", $var6?:"");