【问题标题】:PHP, PDO & MySQL - HTML input-type Date to MySql DATEPHP、PDO 和 MySQL - HTML 输入类型 Date 到 MySql DATE
【发布时间】:2017-12-18 05:18:30
【问题描述】:

我检查了一长串问题,这些问题似乎与解决无法将 HTML 中的日期生成转换为 MySQL 兼容的 DATE 格式的问题有关(请注意:DATE 不是 DATETIME)。

使用 HTML 的以下 sn-p,我正在通过 POST 形成一个输入(请注意:表单上还有其他输入,这只是为了便于建模而进行的细分)。

<!-- Language: HTML -->
<form method="post" action="php/editLoan.php">
    <input type="date" name="dateOfLoan"/>
</form>

当提交按钮被按下时,信息被 POST 到引用的 PHP 文件中。在这里,发生了很多事情,所以我将仅包括日期发生的事情。

// Language: PHP (7.1), which is the latest supported version for my host.

$dateOfLoan = $_POST["dateOfLoan"];  // Grabs the date of the loan from the postman.

$sqlDate = date("Y-m-d",strtotime($dateOfLoan));  // Converts the format.

$dbh = new PDO($this->connString, $username, $password);
$query = $dbh->prepare("INSERT INTO theTable (theDateField) VALUES ($sqlDate)");
$query->execute();

根据我从寻找答案中看到的情况,这应该可行。但是,当我转到 phpMyAdmin (4.6.6) 时,“theDateField”列显示以下条目。

c:theDateField
0000-00-00
0000-00-00
0000-00-00
0000-00-00

我不太确定我哪里出错了,非常感谢一些指导!非常感谢您的帮助! :D

【问题讨论】:

  • 你确定发布日期没有空格或任何其他特殊字符
  • 您是否尝试过打印 $dateOfLoan 变量?它在打印什么?

标签: php html mysql date pdo


【解决方案1】:

这可能会解决您的问题:

$dateOfLoan = $_POST["dateOfLoan"];
$query = $dbh->prepare("INSERT INTO theTable (theDateField) VALUES (STR_TO_DATE('$dateOfLoan', '%d/%m/%Y'))");

【讨论】:

  • 欢迎来到 Stack Overflow!感谢您提供此代码 sn-p,它可能会提供一些即时帮助。一个正确的解释would greatly improve 其教育价值通过展示为什么这是一个很好的解决问题的方法,并将使它对未来有类似但不相同的问题的读者更有用。请edit您的答案添加解释,并说明适用的限制和假设。
【解决方案2】:

在准备好的语句中使用适当的参数,而不是变量替换。

$query = $dbh->prepare("INSERT INTO theTable (theDateField) VALUES (:date)");
$query->bindParam(':date', $sqlDate);
$query->execute();

【讨论】:

    【解决方案3】:

    在值上使用单引号-

    $query = $dbh->prepare("INSERT INTO theTable (theDateField) VALUES ('$sqlDate')");
    

    【讨论】:

    • 你不是明星吗?非常感谢
    猜你喜欢
    • 2019-07-13
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2014-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-15
    相关资源
    最近更新 更多