php - 警告 1264 超出为列(日期时间列)调整的值范围

标签 php mysql

事情是这样的,我有两个字段可以捕获用户何时可以进行某些操作: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/

相关文章:

mysql - Perl 模块实例化 + DBI + fork "Mysql server has gone away"

mySql 日期/日期时间默认值

php - 具体mysql行到php代码

php - (Symfony 4) 无法访问 twig 中的常量数组元素

php - 在 WooCommerce 中先显示当前类别,然后显示子类别

c# - 无法连接表和 View - 调用 'join' 时类型推断失败

php - 无法使用不同的方法连接到 mysql

javascript - select2 多选ajax php

php - 无法正确创建数组

PHP/MySql 改变数组格式