Как проверить действительность строки формата даты и времени PostgreSQL, полученной от пользователя? - PullRequest
0 голосов
/ 16 ноября 2018

Я использую PostgreSQL 9.6 и PHP 7.x.

Я хочу проверить правильность формата даты и времени PostgreSQL, полученного от пользователя. Я посмотрел на этот документ.

Я пробовал это

<?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

У меня вопрос, как это проверить.

1 Ответ

0 голосов
/ 16 ноября 2018

Это потому, что является допустимым форматом.

Вам, вероятно, следует определить, какой формат вы считаете правильным, и, возможно, составить для него регулярное выражение.

Кстати, ваш код уязвим для внедрения SQL, что особенно опасно, поскольку вы пытаетесь проверить ненадежные данные здесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...