【问题标题】:Set a default value for INSERT statement PHP为 INSERT 语句 PHP 设置默认值
【发布时间】:2014-05-06 15:39:53
【问题描述】:

我知道这应该是一个简单的问题,我有以下插入语句,它插入通过表单捕获的值,一切正常,但我还想为不在我的表单上的列添加默认值(假设例如语言),我不想通过数据库添加默认值,因为我有两个表格一起出现在一个表中。

$stmt = DB::query(Database::INSERT,
    'INSERT INTO `my_products` (`first_name`, `initial`, `last_name`, `street`)
    VALUES (:first_name, :initial, :last_name, :street)');                                                      

$stmt->param(':first_name', $post['first_name']);
$stmt->param(':initial', $post['initial']);
$stmt->param(':last_name', $post['last_name']);
$stmt->param(':street', $post['street']);

有没有办法通过上述方式指定默认值?

【问题讨论】:

  • 由于您有两个应保存到同一个表中的表单,因此请在表单中使用 HIDDEN 类型的表单字段并将它们作为常用参数接受。
  • 在这种情况下你可以使用我的小库ValueResolver,请检查我的答案

标签: php mysql sql forms


【解决方案1】:

这是怎么回事?

$stmt = DB::query(Database::INSERT,
    "INSERT INTO `my_products` (`first_name`, `initial`, `last_name`, `street`, `myColumn`)
    VALUES (:first_name, :initial, :last_name, :street, 'my default value')");

或者可能:

$stmt = DB::query(Database::INSERT,
    'INSERT INTO `my_products` (`first_name`, `initial`, `last_name`, `street`, `myColumn`)
    VALUES (:first_name, :initial, :last_name, :street, :my_column)');

...
$stmt->param(':my_column', 'my default value');

【讨论】:

  • 2 号对我有用,谢谢!我做过类似的事情,但错误地留下了 $post。
【解决方案2】:

在这种情况下,您可以使用我的小型库 ValueResolver,例如:

$stmt->param(':my_column', ValueResolver::resolve($post['first_name'], 'default')); // returns 'default' if $post['first_name'] is empty

别忘了使用命名空间use LapaLabs\ValueResolver\Resolver\ValueResolver;

还有类型转换的能力,例如如果你的变量的值应该是integer,那么使用这个:

$id = ValueResolver::toInteger('6 apples', 1); // returns 6
$id = ValueResolver::toInteger('There are no apples', 1); // returns 1 (used default value)

查看docs 了解更多示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-08
    • 2013-10-01
    • 2018-04-02
    • 1970-01-01
    • 2019-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多