6°C
завтра: 2°C
Погода в Перми
6°C
ночью2°C
утром1°C
завтра2°C
Подробно
 64,37
+0.1415
Курс USD ЦБ РФна 15 октября
64,3652
+0.1415
 70,93
+0.2009
Курс EUR ЦБ РФна 15 октября
70,9305
+0.2009
  • Продолжаю по мере свободного времени изучать основы.
    На данный момент у меня возник вопрос по корректному отображению даты из 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-го года.

    Подскажите, пожалуйста еще варианты которые можно попробовать? :dnknow:

  • В ответ на: Таблица со столбцом "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

    Non solum oportet, sed etiam necessese est

  • Не мучай пыхапу.

    SELECT FROM_UNIXTIME('date_time');
    или
    SELECT FROM_UNIXTIME('date_time','%Y %D %M %h:%i:%s');

    если надо зону поставить, то перед запросом еще выполни
    SET time_zone = 'Asia/Novosibirsk';

  • Пока получилось только вывести дату в нужном мне формате.

    while($row = mysqli_fetch_array($result)) {
    $time = date("d.m.Y H:i", strtotime($row['date_time']));
    echo 'Дата:' . $time . '<br />';
    }


    С функциями которые Вы посоветовали, я конечно попробую разобраться, но пока ничего не понятно :улыб:

    Я пока не пойму саму логику того, как сделать, чтобы отображалось мое локальное время, а не то, которое установлено в конфиге 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? Или в подобных проверках нет необходимости?

    Исправлено пользователем Alexander_ (16.02.13 14:46)

  • Пользуйте PDO и не грейте себе голову. Данные методы ни от каких "уязвимостей" не избавляют... была статья на Хабре, пошукайте.

    "Только так, только личная инициатива и напряженная работа над собой. Вот я вас хочу именно к этому призвать .. Нужно своей собственной рукой все делать" (с) В.В. Путин :)

  • Из документации:


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

Записей на странице:

Перейти в форум

Модератор: