当BindParam中的变量为null时如何插入DEFAULT

发布于 2024-10-19 16:05:24 字数 1174 浏览 3 评论 0原文

我正在使用 PDO 准备好的语句。 我想绑定一个变量,但如果该变量为 NULL,则必须在 MYSQL 中插入该字段的默认值。

我正在尝试与 IFNULL(:User_Login__Is_Active, DEFAULT), 我也尝试过: COALESCE(:User_Login__Is_Active, DEFAULT), 同样的错误:

PDOException: SQLSTATE[42000]: 语法错误或访问冲突: 1064 您的 SQL 语法有错误;

你怎么能这么做呢?

看这个例子:

$stmt = $this->pdo->prepare('INSERT INTO user_login
                                    ( User_Login__ID,
                                      User_Login__Is_Active,
                                      User_Login__Created_Date )
                               VALUES ( 
                                      :User_Login__ID,
                                      IFNULL(:User_Login__Is_Active, DEFAULT),
                                      :User_Login__Created_Date )');


$stmt->bindParam(':User_Login__ID', $this->User_Login__ID, PDO::PARAM_INT);
$stmt->bindParam(':User_Login__Is_Active', $this->User_Login__Is_Active, PDO::PARAM_STR, 100);
$stmt->bindParam(':User_Login__Created_Date', $this->User_Login__Created_Date, PDO::PARAM_STR, 100);


$this->User_Login__Is_Active = null;

I'm using PDO prepared statement.
I want to BIND a variable BUT if the variable is NULL it have to INSERT in MYSQL the DEFAULT VALUE of the field.

I'm trying with
IFNULL(:User_Login__Is_Active, DEFAULT),
And I tried also:
COALESCE(:User_Login__Is_Active, DEFAULT),
Same error:

PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax;

How can you do that?

Look at this example:

$stmt = $this->pdo->prepare('INSERT INTO user_login
                                    ( User_Login__ID,
                                      User_Login__Is_Active,
                                      User_Login__Created_Date )
                               VALUES ( 
                                      :User_Login__ID,
                                      IFNULL(:User_Login__Is_Active, DEFAULT),
                                      :User_Login__Created_Date )');


$stmt->bindParam(':User_Login__ID', $this->User_Login__ID, PDO::PARAM_INT);
$stmt->bindParam(':User_Login__Is_Active', $this->User_Login__Is_Active, PDO::PARAM_STR, 100);
$stmt->bindParam(':User_Login__Created_Date', $this->User_Login__Created_Date, PDO::PARAM_STR, 100);


$this->User_Login__Is_Active = null;

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生寂 2024-10-26 16:05:24

关键字DEFAULT不能在表达式内部使用,它只能替换整个表达式。

但是,函数 DEFAULT()可以在任何地方使用。

因此,请将示例中的 DEFAULT 替换为 DEFAULT(User_Login__Is_Active)

The keyword DEFAULT can't be used inside an expression, it can only replace the entire expression.

However, the function DEFAULT() can be used anywhere.

So replace DEFAULT in your example with DEFAULT(User_Login__Is_Active).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文