在mysqli
php库中,在bind_param()
方法中,将参数绑定到查询中。 bind_param()
的第一个参数是types
,一个字符串,其中每个字符代表数据类型传递,例如,'s'代表字符串。
$query = "update users set update_usr_id = ? where user_id = ?"; $arg1 = ($update_usr_id=$usr_id) ? '2011-01-01' : 'CURRENT_DATE'; $arg2 = $update_usr_id;
如何将NULL或CURRENT_DATE表示为参数?
例如,尝试'CURRENT_DATE'作为字符串,但发布为“0000-00-00”。 (据我所知,“0000-00-00”,一个非法的日期,对于不使用NULL的人来说是一个NULL的mysqlism,显然是很多人)。
使用参数,如何使用NULL和CURRENT_DATE?
@Johan指出NULL 确实有效。在测试中,这似乎是真的,但事实并非如此。会发生什么,从第一个NULL参数开始,所有参数都设置为NULL!
默认值与此无关。有很多次我希望在UPDATE中将列设置为NULL或CURRENT_DATE - 而不是INSERT - 因此默认值在事务中不起作用。
另外,编写触发器以涵盖mysqli
的不足之处的想法是非常糟糕的编程 - 在我的日子里写了意大利面条触发器,我是一个可以说话的人。更新日志的触发器是一回事 - 像这样的触发器将是一个持续的维护噩梦,几乎没有可能正确维护代码的可能性。
答案 0 :(得分:1)
如果需要默认参数,可以在数据库模式中指定默认值
对于current_date,您需要将数据类型设置为timestamp
而不是date
,这样MySQL会在丢失数据时自动将now()
插入到字段中。
或创建触发器
DELIMITER $$
CREATE TRIGGER BEFORE INSERT ON FOR EACH ROW
BEGIN
IF new.mydate IS NULL THEN SET new.mydate = NOW();
END $$
DELIMITER ;
如果要传递null
,只需将var设置为null:
$var = null;
<强>链接强>
http://dev.mysql.com/doc/refman/5.1/en/alter-table.html
http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html
答案 1 :(得分:0)
mysqli
参数有限且难以使用。它们不仅不接受NULL和CURRENT_DATE等内部函数作为参数,而且每个参数都通过引用传递。 (这意味着需要为每个参数创建一个参数 - 这可能是INOUT过程参数或SELECT INTO所必需的,但对于普通的dml只是浪费时间。)最重要的是,它们显然不会被会话存储或db以使后续调用更有效。
(比较Postgres准备好的声明,例如,它被命名并重新使用(仅在会话级别)。这意味着数据库不需要重新教授声明;它还意味着语句已经“计划好”,因此不仅会学习语义,还会学习执行计划并重新使用以提高速度。)
目前正在为MySQL编写一些内容,我希望它实际上可用。将在稍后发布。