Задать вопрос
@AnotherAnkor

Как правильно выполнить update в php?

В чём может быть проблема с этим кодом? Не получается обновить статью в базе.
/**
  * Updates the current Article object in the database.
  */

  public function update() {

    // Does the Article object have an ID?
    if ( is_null( $this->id ) ) trigger_error ( "Article::update(): Attempt to update an Article object that does not have its ID property set.", E_USER_ERROR );
    // Update the Article
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "UPDATE articles SET publicationDate=FROM_UNIXTIME(:publicationDate), endPublicationDate=:FROM_UNIXTIME(:endPublicationDate), title=:title, summary=:summary, content=:content, ptype=:ptype, dtype=:dtype WHERE id=:id";
    $st = $conn->prepare ( $sql );
    $st->bindValue( ":publicationDate", $this->publicationDate, PDO::PARAM_INT );
    $st->bindValue( ":endPublicationDate", $this->endPublicationDate, PDO::PARAM_INT );
    $st->bindValue( ":title", $this->title, PDO::PARAM_STR );
    $st->bindValue( ":summary", $this->summary, PDO::PARAM_STR );
    $st->bindValue( ":content", $this->content, PDO::PARAM_STR );
    $st->bindValue( ":ptype", $this->ptype, PDO::PARAM_STR );
    $st->bindValue( ":dtype", $this->dtype, PDO::PARAM_STR );
    $st->bindValue( ":id", $this->id, PDO::PARAM_INT );
    $st->execute();
    $conn = null;
  }

И код для восстановления данных из бд:
public function storeFormValues ( $params ) {

    // Store all the parameters
    $this->__construct( $params );

    // Parse and store the publication date
    if ( isset($params['publicationDate']) ) {
      $publicationDate = explode ( '-', $params['publicationDate'] );

      if ( count($publicationDate) == 3 ) {
        list ( $y, $m, $d ) = $publicationDate;
        $this->publicationDate = mktime ( 0, 0, 0, $m, $d, $y );
      };
    };
    // Parse and store the end publication date
    if ( isset($params['endPublicationDate']) ) {
      $endPublicationDate = explode ( '-', $params['endPublicationDate'] );

      if ( count($endPublicationDate) == 3 ) {
        list ( $y, $m, $d ) = $endPublicationDate;
        $this->endPublicationDate = mktime ( 0, 0, 0, $m, $d, $y );
      };
    };
  }

  /**
  * Returns an Article object matching the given article ID
  *
  * @param int The article ID
  * @return Article|false The article object, or false if the record was not found or there was a problem
  */

  public static function getById( $id ) {
    $conn = new PDO( DB_DSN, DB_USERNAME, DB_PASSWORD );
    $sql = "SELECT *, UNIX_TIMESTAMP(publicationDate) AS publicationDate, UNIX_TIMESTAMP(endPublicationDate) AS endPublicationDate FROM articles WHERE id = :id";
    $st = $conn->prepare( $sql );
    $st->bindValue( ":id", $id, PDO::PARAM_INT );
    $st->execute();
    $row = $st->fetch();
    $conn = null;
    if ( $row ) return new Article( $row );
  }

При этом, если из кода getById не убирать конструкцию FROM_UNIXTIME, то время не восстанавливается. Но если задать запрос в таком виде, то получается ахинея, вида 6995184dcd6e4056a0c1cffe9fbf9fd1.png
А вставить в таком виде, конечно, не получается.
Я чего-то не понимаю. Оно, получается, инициализируется вот этим непонятным и не работает, а без этого не восстанавливается.
Что делать-то? Как изменить код?
  • Вопрос задан
  • 475 просмотров
Подписаться 1 Оценить Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы