我想存储这个:
strftime(&#39;%Y-%m-%d%H:%M:%S&#39;,&#39;现在&#39;,&#39; +3天&#39;)< / p>
在变量中没有被执行。
我想在SQLite数据库中插入这一行,但是&#34; strftime&#34;已经是一个PHP函数,它会抛出一个错误,告诉这行是&#34; false&#34;。(这是真的,因为在PHP中执行)
但在SQLite中,我知道这是一个完全正确的陈述。(我确实直接在我的数据库中执行它,它给了我想要的东西)
以下是我的代码的一部分:
$limitDate = strftime('%Y-%m-%d %H:%M:%S','now', '+3 day');
$stmt = $db->prepare('INSERT INTO opened_order(name, email, date_limit, pack, details)
VALUES(:name, :email, :limitDate, :pack, :details)');
$stmt->bindParam(':limitDate', $limitDate);
我正在添加一些信息来提供帮助。 直接在SQLite shell中执行时这是正确的:
`INSERT INTO opened_order(name, email, date_limit, pack, details)
VALUES ('Meh!', 'okok@yes.com', strftime('%Y-%m-%d %H:%M:%S','now', '+3 day'), 'TD', 'Je veux un ordinateur de moins de 18 kilos.');`
但是有strftime(&#39;%Y-%m-%d%H:%M:%S&#39;,&#39;现在&#39;,&#39; +3天&#39; )在PHP中抛出一个错误(警告:strftime()最多需要2个参数,给出3个)因为PHP的strftime与SQLite的不同。
答案 0 :(得分:1)
不幸的是,您无法让数据库调用PHP函数。但那不是你想要做的。
你想要做的是调用SQLite自己的strftime
函数,对吗?
你做错了是把它作为一个绑定参数。这不是你在PHP中执行并将结果传递给数据库的东西 - 这是绑定参数的用途。相反,您希望将该函数作为查询本身的一部分执行 - 您希望数据库执行它。在这种情况下,只需将其作为查询的一部分:
$stmt = $db->prepare('INSERT INTO opened_order(name, email, date_limit, pack, details)
VALUES(:name, :email, strftime(\'%Y-%m-%d %H:%M:%S\',\'now\', \'+3 day\'), :pack, :details)');
请参阅绑定参数以防止SQL注入 - 您不希望数据被误解为SQL语法的一部分(如果某人的名字为DROP DATABASE;
会怎样?)。但是,在这种情况下,您的strftime
调用不是数据 - 它实际上是查询的SQL语法的一部分。所以你需要把它放在查询字符串中。
希望这有帮助。
答案 1 :(得分:0)
将其简单地声明为String。
$var = "strftime('%Y-%m-%d %H:%M:%S','now', '+3 day')";
希望我理解你的问题吧??
<强>更新强>
如果要使用各种变量动态构建查询,还可以使用以下示例:
$var = "strftime('%Y-%m-%d %H:%M:%S','now', '+3 day')";
$query = "INSERT INTO opened_order (name, email, date_limit, pack, details) VALUES (:name, :email, $var, :pack, :details)";
答案 2 :(得分:-1)
我认为eval会做到这一点。http://php.net/manual/en/function.eval.php
<?php
$var = "strftime('%Y-%m-%d %H:%M:%S','now', '+3 day');";
eval($var);
?>