事情是这样的,我有两个字段可以捕获用户何时可以进行某些操作:Y(1)/N(0) 现在可用字段和可用日期(仅在用户不能立即可用时填充) 。我们决定(在我加入之前),如果用户现在有空,则该值将设置为 1,并且该日期将保留为空白(日期不是必填字段)。
当用户从否(0)更新为是(1)时,我有 php 代码将日期设置为空白。当用户从“否”中单击"is"时,日期最初不会被清空(我认为这是由于此警告 - 我自己在数据库上设置日期时发现的)。当我第二次单击"is"时,它实际上按照我的预期将日期时间列清空。
有没有办法让它第一次就起作用?
(如果可以的话,我会把日期设置为当天,但这似乎不是我的决定。)
谢谢, 沃德勒
最佳答案
当不需要日期时,我建议您使用 NULL。这是您需要执行的操作:
1) 在数据库架构中,将可用日期列设置为默认值 NULL。确保该字段未设置为“NOT NULL”。
2) 我们需要确保在处理该字段时,将其设置为 NULL,顺便说一句,这与“NULL”不同。因此,例如,在插入记录时(如果使用 PDO),请执行以下操作:
// Not sure where you get this, so change it as necessary
$userAvailable = 1;
try {
$dbh = new PDO('mysql:dbname=mydb;host=localhost', 'myusername', 'mypass');
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
// Handle errors...
}
$stmt = $dbh->prepare('INSERT INTO mytable(isAvail,dateAvail) VALUES(:isAvail, :dateAvail)');
// Bind first parameter as integer
$stmt->bindValue(':isAvail', $userAvailable, PDO::PARAM_INT)
// Bind null value. Use PDO::PARAM_INT because there is often
// issues with using PDO::PARAM_NULL
$stmt->bindValue(':dateAvail', null, PDO::PARAM_INT);
// Now that we have prepared our query and made sure it is good against
// SQL injection attacks, lets run it
$stmt->execute();
3) 当从数据库读取值时,您现在可以使用 PHP 的 is_null()函数而不是试图弄清楚“0000-00-00 00:00:00”等日期是否有效。
// Get data from database
...
if( is_null($row['dateAvail']) )
{
echo("User is available now!");
}
关于php - 警告 1264 超出为列(日期时间列)调整的值范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9811461/