Я использую 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
Мой вопрос, как это проверить.
Это потому что является действительный формат.
Вы, вероятно, должны определить, что вы считаете правильным форматом, и, возможно, составить регулярное выражение для этого.
Кстати, ваш код уязвим для внедрения SQL-кода, что особенно опасно, поскольку вы пытаетесь проверить ненадежные данные здесь.
Других решений пока нет …