【问题标题】:How to handle nulls in this PHP/mysql insert statement如何在这个 PHP/mysql 插入语句中处理空值
【发布时间】:2012-06-04 06:30:01
【问题描述】:

我有时会有空值或空值的数组。在 MySql 中,它们被设置为不可为空,但它们分配了默认值。那么,为什么 MySql 会给我一个错误,例如Column user_type can not be null。 (我没有在严格模式下运行)。

我意识到在准备查询时可以使用关键字 DEFAULT 代替某些值,但我真的不想这样做。我希望能够逐字编写我的 SQL 语句,而不是将它们与 foreach 循环等放在一起。例如,我想使用"INSERT INTO users (user_type, first_name, last_name, password) VALUES (:user_type, :first_name, :last_name, :password)";

据我回忆,在我不再使用 ?命名参数的查询标记...

谢谢...

【问题讨论】:

  • 我不认为可以这样做:绑定时发送一个值 is(因为它根本就出现了!),即使NULL。因此 MySQL 不能应用默认值——因为指定了一个值 。有触发器,但是“ick!”。一个“解决方案”是拥有一个基于 Map 的最小查询生成器。 (当然,仍然使用占位符。)
  • 你说的是php吗?因为您提到了“数组”,所以可能值得一提的是哪种语言的数组
  • (我不认为它仅使用具有相同插入结构的?标记;可能想要验证它,如果它确实有效,请参阅用什么魔法。)
  • @SiGanteng,是的,PHP。见问题标题。

标签: php mysql null


【解决方案1】:

我将创建一个接受这些值作为参数的函数。它将在关联数组中具有默认值。如果任何参数的值为 null,则将其替换为默认值。

例如

function setUpQuery($user_type_in, $first_name_in, $last_name_in, $password_in){
       $default_values('user_type' => 'Admin', 'first_name' => 'John', 'last_name' => 'Doe', 'password' => 'XXX');
       $user_type = ($user_type_in == NULL)? $default_values['user_type']:$user_type_in;
       .....
      return "INSERT INTO users (user_type, first_name, last_name, password) VALUES ('$user_type', '$first_name', '$last_name', '$password');"
 }

好点。以下怎么样:

INSERT INTO users(user_type, first_name, last_name,password) values 
(ifnull('$user_type',default(user_type)), ifnull('$first_name', default(first_name)),
 ifnull('$last_name',default(last_name)), ifnull('$password', default(password));

【讨论】:

  • 这具有不使用数据库默认值的严重缺点。
  • @hgolov,我希望静态而不是动态地创建 SQL 语句(及其对应的 PDO),因为它们是分层映射器类的静态成员。我做了一个检查,例如“if !isset($this->_PDOInsert) {...} default() 函数方法不起作用,因为查询的参数类型随每次使用而变化,并且只设置一次(当静态成员已设置)。
  • 我看到您将此标记为已解决。它在你的 pdo 代码中有效吗?
猜你喜欢
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2012-07-08
  • 2016-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
相关资源
最近更新 更多