在php中插入的时间戳

时间:2012-07-04 01:15:23

标签: php mysql timestamp

我有这个sql查询,我需要在上一个更新的函数中为名为“created”的字段添加时间戳。我添加了$sqlMod = sprintf("UPDATE %s SET last_modified=now(), %s WHERE id='%s'", $table, $implodeArray, $_POST['id']);,效果很好。但是,我似乎无法在插入函数中使该语法正确,以使其正常工作。我试过(created, %s) VALUES ("now(), %s") ......但它不起作用。

$sql = sprintf('INSERT INTO %s (%s) VALUES ("%s")', $table, implode(', ', array_map('mysql_escape_string', array_keys($values))), implode('",  "',array_map('mysql_escape_string', $values)));

目前:INSERT INTO projects (created, project_name, project_bold, project_content, id) VALUES ("now(), something", "something", "something", "46919705")

3 个答案:

答案 0 :(得分:1)

NOW()的调用不应该在引号内,但应引用其后面的参数。

(created, %s) VALUES (now(), "%s")

请勿使用mysql_escape_string()。请使用更全面的mysql_real_escape_string()。从长远来看,考虑切换到支持像MySQLi或PDO这样的预处理语句的API,尽管你仍然需要在动态SQL的表名中连接,就像你正在做的那样。

尽管MySQL支持双引号,但字符串值的单引号更为标准。在您的字符串和implode()调用上交换引号,因此最终产品如下所示:

$sql = sprintf("INSERT INTO %s (created, %s) VALUES (NOW(), '%s')", $table, implode(', ', array_map('mysql_real_escape_string', array_keys($values))), implode("',  '",array_map('mysql_real_escape_string', $values)));

作为您和未来读者的安全性的最后一点,我们看不到$table的来源,但如果它来自任何类型的用户输入,建议检查其值是否为可接受的表名称的白名单,因为它不能被mysql_real_escape_string()充分保护。

答案 1 :(得分:0)

您似乎将所有参数放入一个字符串中 - 这不起作用,因为每个参数都需要是一个单独的实体。

您可能只需使用TIMESTAMP DEFAULT CURRENT_TIMESTAMP,然后让数据库为您创建创建时间。

答案 2 :(得分:0)

created数组中删除$values并在SQL字符串中对其进行硬编码。

$sql = sprintf('INSERT INTO %s (%s, created) VALUES ("%s", now())', $table, implode(', ', array_map('mysql_escape_string', array_keys($values))), implode('",  "',array_map('mysql_escape_string', $values)));