【问题标题】:Why can't write the date into mysql with php? [duplicate]为什么不能用php将日期写入mysql? [复制]
【发布时间】:2018-10-13 10:33:39
【问题描述】:

在 php shell 中创建一系列日期。

$sDate = "2018-09-03";
for($i=0;$i<5;$i++){
    $number = 7*$i;
    $day=date("Y-m-d",strtotime("$sDate  + $number day"));
    echo $day."\n";
}

结果如下:

2018-09-03
2018-09-10
2018-09-17
2018-09-24
2018-10-01

创建一个包含表的数据库。

create database `test_day`;
create table test_day( `tday`  date);

我想将所有日期写入表test_day

$dsn = "mysql:host=localhost;dbname=test_day";
$con = new PDO($dsn,"root","xxxxx");
$sDate = "2018-09-03";
for($i=0;$i<18;$i++){
    $number = 7*$i;
    $day=date("Y-m-d",strtotime("$sDate  + $number day"));
    $query="insert into `test_day` (`tday`) value ($day)";
    $con->query($query);
}

现在选择test_day中的确切内容。

select * from  test_day;
+------------+
| tday       |
+------------+
| 0000-00-00 |
| 0000-00-00 |
| 0000-00-00 |
| 0000-00-00 |
| 0000-00-00 |
+------------+

为什么不能将日序列写入test_day

【问题讨论】:

  • 用单引号试试:$query="insert into `test_day` (`tday`) values ('".$day."')";
  • 看来你使用的是PDO库;那么你真的应该把你的查询改成Prepared Statements
  • 添加$con-&gt;setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);,错误将开始向你大喊
  • @MadhurBhaiya - 我支持这一点,如果你在循环之外准备它,它实际上会运行得更快一点。因为它只需要解释查询 1 次并执行 {n} 次。

标签: php mysql date insert


【解决方案1】:

您必须将日期放在单引号之间。

查询现在看起来像这样:

insert into `test_day` (`tday`) values (2018-09-03)

虽然它必须是:

insert into `test_day` (`tday`) values ('2018-09-03')

将您的代码更改为:

$query = "insert into `test_day` (`tday`) values ('$day')";

编辑

我同意那些(也)建议使用准备好的语句以确保安全和效率的人的观点。在您的情况下,代码可能是这样的:

$dsn = "mysql:host=localhost;dbname=test_day";
$con = new PDO($dsn,"root","xxxxx");
$sDate = "2018-09-03";

for ($i=0; $i < 18; $i++){
    $number = 7*$i;
    $day = date("Y-m-d",strtotime("$sDate  + $number day"));

    // Prepare the statement
    $statement = $con->prepare("INSERT INTO `test_day` (`tday`) VALUES (?)");

    // Fill the string placeholder and execute the statement.
    $statement->execute("s", $day);
}

【讨论】:

  • 或者最好还是使用准备好的参数化和绑定查询
  • 我同意,是的。准备好的语句更安全、更快捷。
猜你喜欢
  • 1970-01-01
  • 2019-12-01
  • 2017-04-01
  • 2011-12-17
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多