У меня есть следующий 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');
Добавьте в свой код обработку ошибок (так что вы увидите ошибки, если они существуют).
mysql_query ("UPDATE tinyblog SET views = views + 1 WHERE id = {$ article_id}", $ con) или die (mysql_error ($ con));