2013-08-24 4 views
1

Я пытаюсь обновить просмотры страниц при загрузке веб-страницы.Попытка добавления просмотров страниц с использованием PDO

Каждый раз, когда страница загружается, выполняется следующая функция, но она не добавляет 1 к строке post_views в базе данных mysql.

function addPostView($post_id, $dbh){ 

     $stmt = $dbh->prepare('SELECT post_views FROM crm_posts WHERE post_id=?'); 
     $stmt->bindValue(1, $post_id); 
     $stmt->execute(); 

     while($views = $stmt->fetch(PDO::FETCH_ASSOC)) { 

       $addView = $views++; 
     } 

     $stmt2 = $dbh->prepare('UPDATE crm_posts SET post_views=? WHERE post_id=?'); 
     $stmt2->bindValue(1, $addView); 
     $stmt2->bindValue(2, $post_id); 
     $stmt2->execute(); 

    } 

Я бегу функции просто следующим образом:

if(isset($_GET['post_id']) && checkPostID($_GET['post_id'], $dbh)!= 0){ 


     $post_id = $_GET['post_id']; 
     addPostView($post_id, $dbh); 
... 

Как вы можете видеть, что я пытаюсь использовать два подготовленные заявления в одной и той же функции к а) получить текущее количество просмотров почтовых и затем b) обновить просмотры сообщений, добавив один, но он не обновляется вообще.

Благодаря

+3

Почему не просто 'обновление crm_posts набор post_views = post_views + 1, где post_id ='? – Maerlyn

ответ

1

Вы используете оператор инкремента постфикса вместо суффикса:

$addView = $views++; 

Это означает, что ваш $addView будет иметь значение $view перед ++ увеличивает значение.
Изменение линии:

$addView = ++$views; 

Также переменной$viewсодержит результатPDOStatement::fetch(PDO::FETCH_ASSOC) и это массив с ключом post_views, так что вы должны изменить код:

$addView = ++$views['post_views']; 

Или, если вы хотите сохранить один выполненный sql-запрос, вы можете просто называть это:

$stmt2 = $dbh->prepare('UPDATE crm_posts SET post_views=post_views+1 WHERE post_id=?'); 
$stmt2->bindValue(1, $post_id); 
$stmt2->execute(); 

Нет необходимости называть первый запрос Ге старое значение, если вы хотите сделать что-то дополнительное с ним

Другой примечание к коду:
Вам не нужно использовать во время цикла, если вы ожидаете имеют только один результат (page_id говорит мне, что он должен быть только одним).

Кажется, что люди не знают разницы между постфикса и суффикса ++ оператора:

$view = 0; 
$addView = $view++; // $addView = 0, $view = 1, since ++ is executed after value of $view has been assigned to $addView 

$view = 0; 
$addView = ++$view; // $view = 1; $addView = 1, since $view is first incremented then assigned to $addView 
+0

отличный ответ, спасибо за '++' extra тоже! – crm

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