2014-03-27 110 views
1

我知道這應該是一個簡單的問題,我有以下插入語句插入通過表單捕獲的值,所有工作正常,但我也想添加一個默認值列不在我的表單上(讓我們說例如語言),我不想通過數據庫添加默認值,因爲我有兩種形式來到一個表。設置INSERT語句的默認值PHP

$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']); 

有沒有辦法通過上面指定默認值?

+0

既然你應該在你的形式被保存在同一個表使用隱藏式的表單域,並接受他們像往常一樣參數兩種形式。 – sbrbot

+0

在這種情況下,您可以使用我的小型圖書館[ValueResolver](https://github.com/LapaLabs/ValueResolver),請檢查我的答案 –

回答

3

這是怎麼回事?

$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'); 
+0

Number 2適合我,謝謝!我做了類似的事情,但是錯誤地將$ post留下了。 –

0

你可以用我的小圖書館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更多的例子