【问题标题】:How to check the valid of the PostgreSQL datetime format string taken from user?如何检查从用户获取的 PostgreSQL 日期时间格式字符串的有效性?
【发布时间】:2018-11-16 09:33:26
【问题描述】:

我正在使用 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

我的问题是如何检查。

【问题讨论】:

    标签: php sql postgresql postgresql-9.6


    【解决方案1】:

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

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

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

    【讨论】:

    • 我认为你是对的。我将研究使用正则表达式的方法。顺便说一句,这不是我的主要代码。我写信是为了测试我的思维方式。
    猜你喜欢
    • 1970-01-01
    • 2017-02-03
    • 1970-01-01
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多