PHP,PDO& MySQL - HTML输入类型日期到MySql日期

时间:2017-07-13 12:16:50

标签: php html mysql date pdo

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

使用以下HTML代码段,我通过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)时,列#34; theDateField&#34;显示以下条目。

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

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

3 个答案:

答案 0 :(得分:2)

在value-

上使用单引号
$query = $dbh->prepare("INSERT INTO theTable (theDateField) VALUES ('$sqlDate')");

答案 1 :(得分:2)

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

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

答案 2 :(得分:0)

这可以解决您的问题:

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