mysql 预准备语句中的 DEFAULT 关键字



在mysql准备语句中使用DEFAULT关键字是否安全,例如:

INSERT INTO table (field1, field2, field3) VALUES(?, ?, DEFAULT)

我有一个很长的列列表,我想对那些我没有提供值的列使用 DEFAULT,因此:

INSERT INTO table VALUES (?,?,?,DEFAULT,?,?,?,?,DEFAULT,?,?,?,?,?,?,?,?,?,?)

而不是:

INSERT INTO table (field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19,) VALUES (?,?,?,DEFAULT,?,?,?,?,DEFAULT,?,?,?,?,?,?,?,?,?,?)

(是的,我知道我可以省略列以使它们由默认值填充,但我认为在这种情况下,在没有指定列的情况下,它会将所有替换 ? 的参数移动一个或多个位置,使查询更新错误的字段并导致错误(

我对不使用插入查询中 ? 对 VALUES 括号的引用的风险不是那么专业,所以我担心我会使准备好的语句被利用或不安全。

在预准备语句中使用 DEFAULT 值是插入默认值的唯一方法,因为不能绑定默认值。

假设您有一个列,该列具有默认值,但也允许 NULL 值:

CREATE TABLE t1 (a INT, b INT, c INT DEFAULT 4);

除非您使用 MariaDB(通过使用指标在绑定中支持default(,否则只有在 c 列没有可用的值时,您才能使用 DEFAULT 插入数据。

最新更新