2012-07-27 92 views
10

我無法使用mysql pdo將默認值爲null的可爲空字段設置爲null。我可以使用直接的SQL。PHP的mysql PDO拒絕設置NULL值

我曾嘗試:(大多來自這個問題How do I insert NULL values using PDO?

  1. 空詮釋

    bindValue(':param', null, PDO::PARAM_INT); 
    
  2. 空空

    bindValue(':param', null, PDO::PARAM_NULL); 
    
  3. '空',詮釋

    bindValue(':param', 'NULL', PDO::PARAM_INT); 
    
  4. '空',空

    bindValue(':param', 'NULL', PDO::PARAM_NULL); 
    
  5. bindValue(':param', null); 
    
  6. 'NULL'

    bindValue(':param', 'NULL'); 
    
  7. bindParam同行的5和6與一個變量持有綁定的價值。

中值從PDO結果一切被設置爲0。

PHP版本:PHP 5.3.2-1ubuntu4.10

MySQL服務器版本:5.1.63-0ubuntu0.10.04.1

編輯 截圖的列信息

Picture

+0

什麼是列類型?是可以空的嗎? – 2012-07-27 17:35:00

+2

@ DanielA.White他只是說他可以通過直接sql來完成,所以是可以空的。 – 2012-07-27 17:35:39

+0

你能告訴我們你的代碼的其餘部分,而不僅僅是你的bindValue語句嗎?我懷疑,如果你已經嘗試了所有這些選項,並且它對你的實際數據庫沒有問題,那麼它對你的其他代碼來說肯定是一個問題。 – 2012-07-27 17:36:59

回答

9

下面的工作對我來說:

<?php 

$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "pass"); 
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 

$stmt = $pdo->prepare("INSERT INTO `null_test` (`can_be_null`) VALUES (:null)"); 
$stmt->bindValue(":null", null, PDO::PARAM_NULL); 

$stmt->execute(); 

通在PHP的null,有型的PDO::PARAM_NULL。另外,請確保您的準備模擬設置爲false。這可能有幫助。

+6

This ...'$ pdo-> setAttribute(PDO :: ATTR_EMULATE_PREPARES,false);'這個小傢伙就在這裏就是訣竅。 @Truth,謝謝!太棒了! – wmarbut 2012-07-27 18:54:06

0

我強烈建議首先將所有參數分配給變量,然後將這些變量傳遞給bindParam()方法。

您可以通過將NULL傳遞給這些變量進行賦值,並且它可以正常工作。

$myVar = NULL; 
$conn->bindParam(':param1' , $myVar , PDO::PARAM_STR); 

所有的方式巴基斯坦:)