use*_*310 47 php mysql datetime
由于MySQL显然无法在日期时间字段中自动插入函数now()以添加新记录(如某些其他数据库),基于注释,我明确地尝试使用SQL语句插入它.(由于时间戳的各种限制,人们似乎认为时间戳与curdate()不是答案.)网上有很多文章建议使用SQL插入now()应该有效.
但是,当我尝试使用SQL语句插入日期时间时,该字段不会填充当前时间/日期,但它只给我默认的0000-00-等.这可能是语法错误,但它是让我疯狂,所以我发布它.
mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())";
Run Code Online (Sandbox Code Playgroud)
它插入第一个和最后一个,但在添加时没有任何内容,在whenadded字段中留下稿件等.
字段类型是datetime,它没有排序规则,属性,null默认值或额外值.顺便说一句,我尝试将now()放在单引号中......它引发了一个错误.
小智 78
NOW()通常在SQL语句中起作用并返回日期和时间.检查数据库字段是否具有正确的类型(日期时间).否则,您始终可以使用PHP date()函数并插入:
date('Y-m-d H:i:s')
Run Code Online (Sandbox Code Playgroud)
但我不建议这样做.
小智 18
你忘了关闭mysql_query命令:
mysql_query("INSERT INTO users (first, last, whenadded) VALUES ('$first', '$last', now())");
请注意最后一个括号.
像佩卡说,它应该这样工作.我不能用这个自包含的例子重现问题:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->exec('
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
first int,
last int,
whenadded DATETIME,
primary key(id)
)
');
$pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,1,Now())');
$pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,2,Now())');
$pdo->exec('INSERT INTO soFoo (first,last,whenadded) VALUES (0,3,Now())');
foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) {
echo join(' | ', $row), "\n";
}
Run Code Online (Sandbox Code Playgroud)
哪个(当前)打印
1 | 0 | 1 | 2012-03-23 16:00:18
2 | 0 | 2 | 2012-03-23 16:00:18
3 | 0 | 3 | 2012-03-23 16:00:18
Run Code Online (Sandbox Code Playgroud)
这里是(几乎)使用TIMESTAMP字段和DEFAULT CURRENT_TIMESTAMP的相同脚本:
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->exec('
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
first int,
last int,
whenadded TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
primary key(id)
)
');
$pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,1)');
$pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,2)');
sleep(1);
$pdo->exec('INSERT INTO soFoo (first,last) VALUES (0,3)');
foreach( $pdo->query('SELECT * FROM soFoo', PDO::FETCH_ASSOC) as $row ) {
echo join(' | ', $row), "\n";
}
Run Code Online (Sandbox Code Playgroud)
方便的是,时间戳转换为与第一个示例中相同的日期时间字符串表示 - 至少使用我的PHP/PDO/mysqlnd版本.
我能想到的唯一原因是你将它添加为字符串'now()',而不是函数调用now().
或者其他任何错字.
SELECT NOW();
Run Code Online (Sandbox Code Playgroud)
看它是否返回正确的值?
| 归档时间: |
|
| 查看次数: |
390366 次 |
| 最近记录: |