如何检查从用户那里获取的 PostgreSQL 日期时间格式字符串的有效性?

How to check the valid of the PostgreSQL datetime format string taken from user?

我正在使用 PostgreSQL 9.6 和 PHP 7.x。

我想检查从用户那里收到的 PostgreSQL 日期时间格式的有效性。 我查看了 this 文档。

我试过了

<?php
$format = 'YYYY-MM-DD';
$query = $db->prepare("SELECT TO_CHAR(NOW(), '" . $format . "') AS DATETIME");

if($query->execute()) {
    echo 'valid';
else 
    echo 'invalid';

//Result valid;

<?php 
$format = 'abcdefg';
$query = $db->prepare("SELECT TO_CHAR(NOW(), '" . $format . "') AS DATETIME");

if($query->execute()) {
    echo 'valid';
else 
    echo 'invalid';
//Result valid

它没有像我想要的那样工作。

因为无论格式是否有效,查询都有效。

例子

//sql
SELECT TO_CHAR(NOW(), 'YYYY-MM-DD') AS DATETIME;
//query executed
//Result 
2018-11-16

//sql
SELECT TO_CHAR(NOW(), 'abcdefg') AS DATETIME;
//query executed
    //Result 
    aad6efg

我的问题是如何检查这个。

那是因为它一种有效格式。

您可能应该定义您认为有效的格式,并可能为此编写一个正则表达式。

顺便说一下,您的代码容易受到 SQL 注入的攻击,这特别危险,因为您正在尝试在此处验证不可靠的数据。