Intereting Posts

Приращение значения в скрипте PHP не работает

У меня есть следующий PHP-скрипт для обновления blog view в моей базе данных,

 <?php include('header.php'); ?> <?php $article_id = $_POST['article']; // echo $article_id; $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = 'password'; $con = mysql_connect($dbhost, $dbuser , $dbpass); $sql = 'SELECT id,blog_title, blog_body, views FROM tinyblog where id="'. $article_id .'" '; // UPDATE VIEWS. mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = {$article_id}" , $con ); mysql_select_db('tinyblog'); $retval = mysql_query( $sql, $con ); if(! $retval ) { die('Could not get data: ' . mysql_error()); } while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) { ?> <div class="article-blog-indiv"> <?php echo '<h1>'. $row['blog_title'] .'</h1>'; echo '<p>'. $row['blog_body'] .'</p>'; ?> </div> <?php } ?> <?php include('footer.php'); ?> 

Это следующая строка кода, которая фактически обновляет поле представлений в моей базе данных:

 mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = {$article_id}" , $con ); 

Теперь эта строка кода не работает, так как каждый раз, когда я возвращаюсь и проверяю phpmyadmin, я вижу, что в поле views все равно 0 Но когда я вставляю следующий оператор непосредственно для тестирования моего моего phpmyadmin:

 mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = 1); 

Я вижу прирост в поле представлений, почему это происходит?

Несколько вещей, которые нужно исправить. сначала вы используете mysql, когда вы должны использовать mysqli или PDO. Во-вторых, вы используете почтовые данные без каких-либо экранов. В-третьих, вам не нужен этот выбор и обновление. Вы можете сделать это в одном заявлении.

 $query = "UPDATE tinyblog SET views = views + 1 WHERE id = (SELECT id FROM tinyblog where id=:article)" $db = new PDO('mysql:host=localhost;dbname=mydb', 'username', 'password'); $stmt = $db->prepare($query); $stmt->execute(array(":article"=>$article_id)); 

То, что мы делаем здесь, – это создание подготовленного заявления с одним владельцем места. Мы назвали это как :article но ее можно было оставить как ? вместо.

Затем, когда запрос выполняется, вам нужно заполнить недостающие бит, передав параметры. Это то, что мы делаем на последнем шаге с array(":article"=>$article_id)

Поскольку это именованный параметр, мы используем ассоциативный массив. В качестве альтернативы вы могли бы вызвать выполнение без каких-либо параметров, если бы вы сначала вызвали bindParam .

Помимо всех комментариев, которые вы уже получили относительно функций mysql_, таблиц bobby (которые вы, вероятно, скоро получите) и т. Д., Обратите внимание, что вы выбираете свой db перед запуском запроса:

 mysql_query("UPDATE tinyblog SET views = views + 1 WHERE id = {$article_id}" , $con ); mysql_select_db('tinyblog'); 
  1. Убедитесь, что вы выбрали db сразу после вашего соединения.
  2. Добавьте в свой код обработку ошибок (так что вы увидите ошибки, если они существуют).

    mysql_query ("UPDATE tinyblog SET views = views + 1 WHERE id = {$ article_id}", $ con) или die (mysql_error ($ con));