2015-12-01 3 views
1

Я хочу установить значение переменной в последний идентификатор, вставленный в DB , до, вставив мой запрос.Задайте значение последнего идентификатора перед запросом

В настоящее время у меня есть следующий код:

// Construct 
public function __construct($content, $emotion, $conn) 
{ 
    $this->content = $content; 
    $this->emotion = $emotion; 
    $this->post = 
     "<div id=\'post\'> 
      <div id=\'postContent\'> 
       <p><b>I\'m $this->emotion because</b> $this->Id $this->content<span class=\'emot\'id=\'$this->emotion\'></span></p> 
      </div> 
      <div id=\'postInfo\'> 
       <span class=\'postRelate\' title=\'Click to relate +1\'><p><b>relate</b> (0)</p></span> 
       <span class=\'postSubmitted\'><p>submitted X minutes ago</p></span> 
      </div> 
     </div>";  
} 

// Confirm booking (update database) function 
public function insert_userPost($conn) 
{ 
    if($this->content != "") 
    { 
     // SQL INSERT command 
     $sql = ("INSERT INTO userPost (content, submitted, emotion) 
       VALUES ('$this->post', NOW(), '$this->emotion')"); 
     $this->Id = $conn->insert_id; 
     if ($conn->query($sql) === TRUE) 
     { 
      header('Location: feed.php?filter=all&page=1'); 
     } 
     else 
     { 
      echo "Error: " . $sql . "<br>" . $conn->error; 
     } 
    } 
    else 
    { 
     header('Location: post.php'); 
    } 
} 

В конструкции я устанавливаю переменный $ пост к DIV, содержащего содержащий $ this-> переменную Id.

Вниз в функции insert_userPost() Я вставляю запрос, содержащий $ this-> post, а другой - идентификатор с последним идентификатором, вставленным в базу данных. Я знаю, что он успешно получает идентификатор из базы данных. Однако, поскольку я явно получаю значение для Id до, вставка неправильно отображается на $ post после вставки.

+0

Вы не можете получить внутренний идентификатор базы данных, пока он фактически не вставлен в базу данных ... Вероятно, вы получите идентификатор из предыдущей вставленной строки! –

+0

Да, я не сказал, что это здорово. Мой вопрос больше о том, как я могу достичь той же цели. Разве я ничего не могу сделать? Я понимаю, что я смогу получить наивысший идентификатор из БД и +1, но я могу себе представить, что это приведет к некоторым довольно неприятным проблемам. –

+0

@ LiamMacmillan: Да, это было бы .. Нет правильного способа получить последний вставленный идентификатор отдельно от фактической вставки последней строки и получения идентификатора. – D4V1D

ответ

0

Вы не можете получить идентификатор из базы данных, если только вы действительно не вставляете строку. Трудно предсказать, что использует ID MySQL.

Вы должны добавить это сообщение в конструкцию, чтобы получить идентификатор для справки. Вы можете установить новый столбец в базе данных: posted=false и submitted=NOW().

В insert_userPost() вы установили posted=true и удалили все строки с помощью posted=false WHERE submitted<DATE_SUB(NOW(), INTERVAL -1 DAY).

Другим решением является временное хранение всего содержимого переменной сеанса без идентификатора и сохранение/выбор изменений из сеанса. Когда он будет опубликован, вы добавите его в базу данных!

Смежные вопросы