2017-03-05 49 views
0

我想使用PDO將一些數據插入MySql表中。如果它不是空的,它將有Integer數據類型,所以我使用PDO :: PARAM_INT,但問題是這個數據不是必需的,所以有時它是空的。使用Bindparam無誤地插入空值不正確的整數值

這讓我有一個錯誤:

PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value.

那麼,這無論如何,我可以在這個空值變量傳遞到我的數據庫,而無需錯誤時,它具有空值?這裏是我的代碼片段:

$stmt = $db->prepare("INSERT INTO table (column) VALUES (:column)"); 
$stmt->bindParam(':column',$_POST['value'], PDO::PARAM_INT); 
$stmt->execute(); 

回答

0

有兩種可能的解決方案。

更廣泛的一個是關閉strict mode for your Mysql server

雖然它不可能/不可取的,將其轉換在PHP中插入

$value = $_POST['value']===NULL ? null : (int)$_POST['value']; 

之前,如果你的字段允許空值和

$value = (int)$_POST['value']; 

如果沒有。

現在綁定$值,而不是$ _ POST [「值」]

+0

所以它不可能在這種情況下使用Bindparam? – Ying

+0

這是可能的,但bindparam是最醜陋和無用的PDO部分。無論如何,我完全改變了我的答案,所以它不符合你的愛情,bindParam –

+0

不錯,但我可以知道爲什麼bindparam是醜陋的和無用的嗎?比使用bindparam更衛生嗎?還是有比這更省錢的方法? – Ying