Как проверить действительность строки формата даты и времени PostgreSQL, полученной от пользователя?

Я использую 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

Решение

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

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

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

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]