2012-07-27 71 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); 

所有的方式巴基斯坦:)