SQL Query 没有使用 DATE_FORMAT 方法重新格式化 PHP 文件的日期?

Posted

技术标签:

【中文标题】SQL Query 没有使用 DATE_FORMAT 方法重新格式化 PHP 文件的日期?【英文标题】:SQL Query is not reformatting date on PHP file using DATE_FORMAT method? 【发布时间】:2018-08-29 19:47:39 【问题描述】:

默认情况下,phpMyAdmin 的日期时间列格式为 YYYY-MM-DD,但我正在尝试使用我的 PHP 文件上的 SQL 语句将其重新格式化为 MM-DD-YYYY。这是我使用的代码,但它不起作用:

<?php
$usertext = $_POST['textinput'];
$insertsql = "INSERT INTO testtext (usertext) VALUES ('$usertext')";

if (isset($_POST['textinput'])) 
    require '../db.php';
    mysqli_query($db, $insertsql);


$selectdate = "SELECT textdate, DATE_FORMAT(textdate,'%m/%d/%Y') AS newdate FROM testtext";
$dateresult = mysqli_query($db, $selectdate);

while ($row = mysqli_fetch_assoc($dateresult)) 
    echo "$row['textdate']<br>";

?>

此代码能够很好地将“textdate”列中的行显示到我的测试站点上,但 DATE_FORMAT 代码无法重新格式化日期。你能帮我修复这个代码吗?非常感谢。

【问题讨论】:

你的脚本有SQL Injection Attack的风险看看Little Bobby Tables发生了什么甚至if you are escaping inputs, its not safe!使用prepared parameterized statements。 更新您的问题并添加适当的数据样本.. $row['newdate'] 长什么样子? @rickdenhaan $row['newdate'] 不显示日期,只是一个空字符串。 $row['textdate'] 确实显示了日期,但不是以所需的格式。 @John Conde 感谢您提供信息并让我知道。我只是先测试这个脚本,因为它更容易。之后我打算从事安全工作。 【参考方案1】:

您正在调用您的格式化日期newdate,但在您的代码中指的是textdate。您需要引用您将 DATE_FORMAT() 的结果分配给的别名,而不是原始列标识符。

while ($row = mysqli_fetch_assoc($dateresult)) 
    echo "$row['newdate']<br>";

【讨论】:

但是当我将其更改为 $row['newdate'] 时,日期不显示。我认为这是因为我的数据库中的表名为“textdate”而“newdate”不存在。 执行var_dump($row); 并查看结果中是否存在该值 @codo7081 不,你错了。 Newdate 是一个字段别名。如果那里没有显示任何内容,则说明转换出错并返回 null,或者发生了其他错误。 @John Conde 嘿,现在可以了!看来我应该回应 newdate 代替。非常感谢您的帮助!

以上是关于SQL Query 没有使用 DATE_FORMAT 方法重新格式化 PHP 文件的日期?的主要内容,如果未能解决你的问题,请参考以下文章

Sql Query获取json结果中没有列名的数组

SQL Big Query 完全连接表以使用相同的过滤器

SQL Union Query - 两个访问表

基于会话的 Google Big Query SQL 聚合数据

从 Linq Query 调用 SQL 标量函数

sql无法通过mysqli_multi_query执行