如何检查从用户那里获取的 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 注入的攻击,这特别危险,因为您正在尝试在此处验证不可靠的数据。
我正在使用 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 注入的攻击,这特别危险,因为您正在尝试在此处验证不可靠的数据。