PHP, MySQL - вопросы
6038
7
Alexander_
veteran
Продолжаю по мере свободного времени изучать основы.
На данный момент у меня возник вопрос по корректному отображению даты из MySQL.
Дано: Таблица со столбцом "timestamp", в котором отображается дата и время, в часовом поясе, который установлен на сервере (если я правильно понимаю) и имеет вид 2013-02-06 18:23:34, например.
Необходимо: выводить данные в формате date("d.m.Y H:i"); и нужном часовом поясе.
Вечером попробовал сделать сам, не получилось
Имею код:
Пробовал писать date("d.m.Y H:i", $row['date_time']), формат получается нормальный, но дата и время что то около 70-го года.
Подскажите, пожалуйста еще варианты которые можно попробовать?
На данный момент у меня возник вопрос по корректному отображению даты из MySQL.
Дано: Таблица со столбцом "timestamp", в котором отображается дата и время, в часовом поясе, который установлен на сервере (если я правильно понимаю) и имеет вид 2013-02-06 18:23:34, например.
Необходимо: выводить данные в формате date("d.m.Y H:i"); и нужном часовом поясе.
Вечером попробовал сделать сам, не получилось
Имею код:
<?php
date_default_timezone_set('Asia/Novosibirsk');
$dbc = mysqli_connect('localhost', 'user', 'pass', 'host_db')
or die('Ошибка соединения с MySQL сервером.');
mysqli_set_charset($dbc, "utf8");
$query = "SELECT * FROM table";
$result = mysqli_query($dbc, $query)
or die('Невозможно выполнить запрос к базе данных.');
while($row = mysqli_fetch_array($result)) {
echo $row['date_time'] . '<br />'; //Здесь выводится время в том же формате и часовом поясе, что и в базе
}
mysqli_close($dbc);
echo '<br />' . date("d.m.Y H:i"); //Здесь выводится корректное время Новосибирска в нужно формате
?>
Пробовал писать date("d.m.Y H:i", $row['date_time']), формат получается нормальный, но дата и время что то около 70-го года.
Подскажите, пожалуйста еще варианты которые можно попробовать?
Mad_Dollar
guru
Таблица со столбцом "timestamp", в котором отображается дата и время, в часовом поясе, который установлен на серверепервое.
в данном случае таймзона-на-сервере - это та таймзона, которая указана в конфиге mysql, или, которая была при старте mysql (если в конфиге не определена). ваш вызов "date_default_timezone_set('Asia/Novosibirsk');" для php бесполезен.
вообще, самое простое решение - храните дату/время в UTC, и UTC поставте таймзону mysql. и внутри приложения уже переводите с помощью средств php дату из UTC в нужную таймзону. помните, что ваше возвернутое из недр mysql поле с датой / временем - обычная строка текста для php
второе.
вам нужна скорее всего вот эта функция - http://www.php.net/manual/ru/function.strftime.php
Сэймэй
просветлённый
Не мучай пыхапу.
SELECT FROM_UNIXTIME('date_time');
или
SELECT FROM_UNIXTIME('date_time','%Y %D %M %h:%i:%s');
если надо зону поставить, то перед запросом еще выполни
SET time_zone = 'Asia/Novosibirsk';
SELECT FROM_UNIXTIME('date_time');
или
SELECT FROM_UNIXTIME('date_time','%Y %D %M %h:%i:%s');
если надо зону поставить, то перед запросом еще выполни
SET time_zone = 'Asia/Novosibirsk';
Alexander_
veteran
Пока получилось только вывести дату в нужном мне формате.
С функциями которые Вы посоветовали, я конечно попробую разобраться, но пока ничего не понятно
Я пока не пойму саму логику того, как сделать, чтобы отображалось мое локальное время, а не то, которое установлено в конфиге MySQL.
while($row = mysqli_fetch_array($result)) {
$time = date("d.m.Y H:i", strtotime($row['date_time']));
echo 'Дата:' . $time . '<br />';
}
С функциями которые Вы посоветовали, я конечно попробую разобраться, но пока ничего не понятно
Я пока не пойму саму логику того, как сделать, чтобы отображалось мое локальное время, а не то, которое установлено в конфиге MySQL.
Alexander_
veteran
Возник вопрос, насколько оправдано в данный момент использовать подобные проверки отправленных данных
Иными словами, на данный момент существует уязвимости с помощью которых можно передать через текстовые поля в MySQL? Или в подобных проверках нет необходимости?
$name = mysqli_real_escape_string($dbc, trim($_POST['name']));
$score = mysqli_real_escape_string($dbc, trim($_POST['score']));
$screenshot = mysqli_real_escape_string($dbc, trim($_FILES['screenshot']['name']));
Иными словами, на данный момент существует уязвимости с помощью которых можно передать через текстовые поля в MySQL? Или в подобных проверках нет необходимости?
tolstopuz
v.i.p.
Пользуйте PDO и не грейте себе голову. Данные методы ни от каких "уязвимостей" не избавляют... была статья на Хабре, пошукайте.
IEEE
experienced
Из документации:
<?php
/* Выполнение запроса с привязкой PHP переменных */
$calories = 150;
$colour = 'red';
$sth = $dbh->prepare('SELECT name, colour, calories
FROM fruit
WHERE calories < :calories AND colour = :colour');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
$sth->execute();
?>
Я пока не пойму саму логику того, как сделать, чтобы отображалось мое локальное время, а не то, которое установлено в конфиге MySQL.Таймзона установлена в php.ini?