当前位置: 首页 > 面试题库 >

如何使用PDO插入NULL值?

乔伯寅
2023-03-14
问题内容

我正在使用此代码,而我感到无奈:

try {
    $dbh = new PDO('mysql:dbname=' . DB . ';host=' . HOST, USER, PASS);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");
}
catch(PDOException $e)
{
    ...
}
$stmt = $dbh->prepare('INSERT INTO table(v1, v2, ...) VALUES(:v1, :v2, ...)');
$stmt->bindParam(':v1', PDO::PARAM_NULL); // --> Here's the problem

PDO::PARAM_NULL, null, '', 它们全部失败并抛出此错误:

致命错误 :无法在/ opt / …中通过引用传递参数2


问题答案:

我只是在学习PDO,但我认为您需要使用bindValue,而不是bindParam

bindParam接受要引用的变量,并且在调用时不提取值bindParam。我在对php文档的评论中发现了这一点:

bindValue(':param', null, PDO::PARAM_INT);

编辑:PS您可能会想这样做,bindValue(':param', null, PDO::PARAM_NULL);但是它并不适合所有人(感谢您将Shaver进行举报。)



 类似资料:
  • 问题内容: 我正在掌握PDO的基础知识。 但是我试图获取插入的行的ID,我使用: 我遇到的教程都是关于交易的,但是我没有使用交易! 问题答案: 您可能正在寻找lastInsertId。“返回最后插入的行或序列值的ID”。

  • 问题内容: 细节 我想利用mysql的空间扩展,因此我试图使用bindParam将经度和纬度存储在数据类型为POINT的mysql表中。不幸的是,我不断收到错误SQLSTATE [23000]:违反完整性约束:1048列“位置”不能为空。 我检查了经度和纬度是否有价值。因此问题必须出在我的代码上,但我看不到自己在做什么错。 这是我正在使用的代码。 题 我究竟做错了什么?如何使用PDO和bindPa

  • 问题内容: 我在使用PDO将多个记录插入数据库时​​遇到麻烦。我可以成功添加一条记录,但是一旦添加循环,它就会失败。在阅读了与此相关的许多其他SO问题之后,我相信我需要“绑定”我的变量,尽管我对正确的语法完全感到困惑。 这是我创建的原始函数: 在类似于此: 更新: 对于那些感兴趣的,这是我修复错误后的最终功能: 问题答案: 您不需要绑定变量。香港专业教育学院以前用类似的代码做到这一点。很难说出什么

  • 问题内容: 使用PDO]库时是否需要在输入中使用(例如和)? 如何使用PDO正确避开用户输入? 问题答案: 如果使用PDO,则可以对查询进行参数化,从而无需转义任何包含的变量。 使用PDO,您可以使用准备好的语句将SQL和传递的参数分开,这消除了对转义字符串的需要,因为由于将两者分开保存,然后在执行时组合在一起,因此从上述来源自动将参数作为字符串处理: 注意:在变量绑定()期间进行清理

  • 问题内容: 我正在使用PHP中的mvc结构,我想检索最后插入的行ID。 我创建了以下sql代码: 但不幸的是我遇到了这个错误: 我也尝试过此堆栈链接,但不适用于我,因此如果您能帮助我获取ID,我将非常高兴。 我也在这里共享我的controller.php文件。 问题答案: 你快到了。 如果您查看lastInsertId的手册页,则会在数据库句柄上调用它- 您当前正在语句中对其进行调用。 您只需要致

  • 问题内容: 我正在将PHP PDO与PostgreSQL一起用于新项目。 给定以下功能,如何返回刚刚插入的行的ID?它不像现在那样工作。 问题答案: 从手册: 根据基础驱动程序,返回最后插入的行的ID或序列对象的最后一个值。例如,PDO_PGSQL()要求您为name参数指定序列对象的名称。 应该是这样的: [编辑]更新文档链接