【发布时间】:2011-01-28 16:52:16
【问题描述】:
引用 MySQL INSERT 手册 - 更新也是如此:
使用关键字 DEFAULT 将列显式设置为其默认值。这使得编写将值分配给除少数列之外的所有列的 INSERT 语句变得更容易,因为它使您能够避免编写不包含表中每一列的值的不完整 VALUES 列表。否则,您将不得不写出与 VALUES 列表中的每个值对应的列名列表。
所以简而言之,如果我写
INSERT INTO table1 (column1,column2) values ('value1',DEFAULT);
将插入一个将 column2 设置为其默认值的新行(无论它可能是什么)。
但是,如果我在 PHP 中准备并执行一条语句:
$statement = $pdoObject->
prepare("INSERT INTO table1 (column1,column2) values (?,?)");
$statement->execute(array('value1','DEFAULT'));
如果该列能够存储文本值,则新行将包含“DEFAULT”作为其文本值。
现在我已经为 PDO 编写了一个抽象层(我需要它),为了解决这个问题,我正在考虑引入一个
const DEFAULT_VALUE = "randomstring";
所以我可以执行这样的语句:
$statement->execute(array('value1',mysql::DEFAULT_VALUE));
然后在进行绑定的方法中,我将通过发送要绑定的值,如果一些值等于self::DEFAULT_VALUE,则采取相应的行动。
我很确定有更好的方法来做到这一点。有没有其他人遇到过类似的情况?
【问题讨论】:
-
由于 PDO 将您的值作为要输入的字符串处理,如果可能的话,您可能需要稍微更改代码。您可能会更改它以便输入
...execute(array('\'value1\'', 'DEFAULT')),但我猜 PDO 正在使用mysql_real_escape_string()等为您处理这些值。这会破坏该功能。您可能只需将其直接插入到prepare()参数中。 -
为什么不在
INSERT语句中包含您设置为默认值以外的值的列? -
问题在于
UPDATE和一个空的提交输入。我需要将其设为默认值,例如''设置为新值时的日期字段不是0000-00-00。
标签: php mysql pdo prepared-statement default-value