当BindParam中的变量为null时如何插入DEFAULT
我正在使用 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 withIFNULL(: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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
关键字
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 withDEFAULT(User_Login__Is_Active)
.