在 mysqli
php 库中,在 bind_param()
方法中,将参数绑定(bind)到查询。 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
的不足的想法是非常糟糕的编程 - 在我的日子里写过意大利面条触发器,我是一个可以谈论的人。更新日志的触发器是一回事 - 像这样的触发器将是一个持续的维护噩梦,代码将永远被正确维护的可能性很小。
最佳答案
如果你想要一个默认参数,你可以在数据库模式中指定一个默认值。
对于 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
关于php - 使用mysqli防止sql注入(inject),如何设置NULL或CURRENT_DATE?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7330744/