【发布时间】:2011-09-07 08:15:02
【问题描述】:
在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 的不足之处的想法是非常糟糕的编程——在我写过意大利面条触发器的日子里,我是一个可以说话的人。更新日志的触发器是一回事 - 像这样的触发器将是一个持续的维护噩梦,代码被正确维护的可能性很小。
【问题讨论】:
-
与其尝试在您的 PHP 代码中执行此操作,不如设计您的数据库架构以便这些值是给定列的默认值。这样,您需要做的就是不在您的 php 代码中提供数据。
-
这不起作用有两个原因:首先,如果尝试更新现有值,其次,当值可能为空时,必须提供两个(或更多)完全不同的查询。
标签: php mysql mysqli prepared-statement bindparam