【问题标题】:PHP mysql PDO refuses to set NULL valuePHP mysql PDO拒绝设置NULL值
【发布时间】:2012-07-27 17:33:14
【问题描述】:

我无法使用 mysql pdo 将默认值为 null 的可空字段设置为 null。我可以使用直接的 sql 来做到这一点。

我试过了:(主要来自这个问题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. '空'

    bindValue(':param', 'NULL');
    
  7. 以及 5 和 6 的 bindParam 对应项,其中包含一个保存绑定值的变量。

所有来自 PDO 的结果都将值设置为 0。

PHP版本: PHP 5.3.2-1ubuntu4.10

MYSQL 服务器版本: 5.1.63-0ubuntu0.10.04.1

编辑 栏目信息截图

【问题讨论】:

  • 什么是列类型?那可以为空吗?
  • @DanielA.White 他只是说他可以通过直接 sql 来做到这一点,所以是的,它可以为空。
  • 您能否向我们展示您的其余代码,而不仅仅是您的 bindValue 语句?我怀疑如果你已经尝试了所有这些选项并且它不是你的实际数据库的问题,那么它一定是你的其余代码的问题。
  • @Daniel A. White,我已经包含了一个屏幕截图,显示该列可以为空,而且正如 Jon Taylor 所说,我可以使用直接 sql 来做到这一点。
  • @JonTaylor 构建查询的代码有半页长,我不愿分享它。我可以毫无疑问地确认我的值绑定调用肯定会被调用,并且以后不会被覆盖。

标签: php mysql pdo


【解决方案1】:

以下对我有用:

<?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。这可能会有所帮助。

【讨论】:

  • 这...$pdo-&gt;setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 这个小家伙就是诀窍。 @真相,谢谢!伟大的收获!
【解决方案2】:

我强烈建议首先将所有参数分配给变量,然后将这些变量传递给bindParam() 方法。

您可以通过将 NULL 传递给这些变量来进行分配,它会正常工作。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    相关资源
    最近更新 更多