2

mysqliphp 库中,在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是非常糟糕的编程 - 在我写过意大利面条触发器的日子里,我是一个可以说话的人。更新日志的触发器是一回事——像这样的触发器将是一个持续的维护噩梦,代码被正确维护的可能性很小。

4

2 回答 2

0

如果你想要一个默认参数,你可以在数据库模式中指定一个默认值。
对于 current_date 您需要将数据类型设置为timestampnot 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

于 2011-09-07T14:59:37.840 回答
-1

mysqli参数有限且难以使用。它们不仅不接受 NULL 和像 CURRENT_DATE 这样的内部函数作为参数,而且每个参数都通过引用传递。(这意味着需要为每个参数创建一个参数 - 这对于 INOUT 过程参数或 SELECT INTO 可能是必需的,但对于普通 dml 来说只是浪费时间。)除此之外,它们显然不被会话存储或 db 使后续调用更有效率。

(例如,与 Postgres 准备好的语句相比,它被命名并且我被重用(尽管仅在会话级别)。这意味着数据库不需要重新教授该语句;这也意味着该语句已经“计划”,因此不仅可以学习语义,还可以学习执行计划并重新使用以提高速度。)

目前正在为 MySQL 编写一些东西,我希望它实际上是可用的。稍后会发布。

于 2011-09-12T13:36:11.107 回答