gpt4 book ai didi

mysql - 不能用 PDO 设置 NULL

转载 作者:太空宇宙 更新时间:2023-11-03 10:49:58 25 4
gpt4 key购买 nike

我知道还有关于此主题的其他帖子,但它们没有回答基本问题。之前的答案都说使用 PDO::PARAM_NULL 但这不会消除使用 PDO 的全部原因吗?

这是我的代码:

    $sql = "INSERT INTO users_address (uid,street1,street2,city,state,region,postalcode,country) VALUES (?,?,?,?,?,?,?,?)";
$stmt = $this->db->conn_id->prepare($sql);
$stmt->bindParam(1, $uid, PDO::PARAM_INT);
$stmt->bindParam(2, $street1, PDO::PARAM_STR);
$stmt->bindParam(3, $street2, PDO::PARAM_STR);
$stmt->bindParam(4, $city, PDO::PARAM_STR);
$stmt->bindParam(5, $state, PDO::PARAM_STR);
$stmt->bindParam(6, $region, PDO::PARAM_STR);
$stmt->bindParam(7, $postalcode, PDO::PARAM_STR);
$stmt->bindParam(8, $country, PDO::PARAM_STR);
$stmt->execute();

并非所有这些值都是必需的,因此有时它们为空。 varchar 和 int 数据库字段都具有 default=null。我该如何准备,以便如果变量恰好为空,则插入空值?我看到的所有其他答案都为第二个参数传递 NULL,但我怎么知道在运行时它是 null?

说的很清楚。我不想隐式插入一个空值。如果用户没有完成表单,我想插入一个可能为空的变量。并非表格上的所有字段都是必需的。例如,在此示例中,$street2。

最佳答案

在 SQL 中,或者至少在标准 SQL 和大多数 SQL 风格中 — 是的,我在看你,Oracle — NULL 是一个与空字符串完全不同的特殊值。在 SQL 代码中,您使用 NULL 关键字来表示前者和后者的空引号。

您的输入来自 HTML 表单。 HTML 表单总是以纯文本形式提交:您没有任何其他内容,没有数字,没有日期……当然也没有空值。每当您需要实际的 NULL 时,您都需要进行一些后处理。令人高兴的是,PDO 会将 PHP 空值转换为 SQL 空值:

$stmt->bindValue(6, $region!='' ? $region : null, PDO::PARAM_STR);

PDO(和 SQL)只是不知道 HTML,不会为您做。

我还用 bindValue() 替换了您的 bindParam() 以使其不那么冗长。

关于mysql - 不能用 PDO 设置 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26102116/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com