这就是事情,我有两个字段可以在用户可用时捕获:Y(1)/ N(0)现在可用字段和可用日期(仅在用户不能立即可用时填充) 。决定(在我出现之前)如果用户现在可用,则该值将设置为1,并且该日期将保持空白(日期不是必填字段)。
当用户从No(0)更新为Yes(1)时,我有php代码将日期设置为空白。当用户从No单击Yes时,日期最初不会被清空(我认为这是由于此警告 - 我在我自己设置日期时发现的)。当我第二次单击是时,它实际上按照我的意图将日期时间列空白。
有没有办法让它第一次运作?
(如果我可以按照我的方式,我只会将日期设置为当天,但这似乎不是我的电话。)
谢谢, Waddler
答案 0 :(得分:1)
我建议您在不需要日期时使用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-0000: 00:00'有效或无效。
// Get data from database
...
if( is_null($row['dateAvail']) )
{
echo("User is available now!");
}
答案 1 :(得分:0)
只需将其设为日期时间而不是时间戳。