Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php mysql pdo命中计数器_Php_Mysql_Pdo_Counter - Fatal编程技术网

Php mysql pdo命中计数器

Php mysql pdo命中计数器,php,mysql,pdo,counter,Php,Mysql,Pdo,Counter,我不能让计数器在每次有人进入页面时都向数据库中添加1和值增量。。。仅在重新加载时工作。 我的代码中的错误在哪里?你能帮我解决这个问题吗 我不知道你是否需要我的整个html页面,如果你想我页面。url的id如下所示:post.php?id\u blog=4 守则: <?php try { $query = "SELECT id_blog, blog_titulo, blog, vistoblog FROM BL

我不能让计数器在每次有人进入页面时都向数据库中添加1和值增量。。。仅在重新加载时工作。 我的代码中的错误在哪里?你能帮我解决这个问题吗

我不知道你是否需要我的整个html页面,如果你想我页面。url的id如下所示:
post.php?id\u blog=4

守则:

<?php 
                    try {
                    $query = "SELECT id_blog, blog_titulo, blog, vistoblog FROM BLOG WHERE id_blog = ?";
                    $stmt = $conn->prepare( $query );
                    $stmt->bindParam(1, $_REQUEST['id_blog']);    
                    $stmt->execute();
                    $row = $stmt->fetch(PDO::FETCH_ASSOC);
                        $id_blog = $row['id_blog'];
                        $blog_titulo = $row['blog_titulo'];
                        $blog = $row['blog'];
                        $vistoblog = $row['vistoblog'];
                    }catch(PDOException $exception){ 
                    echo "Error: " . $exception->getMessage();
                    }
                    try{
                        $visto = $vistoblog + 1;
                        $sql = "UPDATE BLOG SET 
                        vistoblog = :vistoblog
                        WHERE id_blog = :id_blog";
                        $stmt = $conn->prepare($sql);
                        $stmt->bindParam(':vistoblog', $visto, PDO::PARAM_STR);
                        $stmt->bindParam(':id_blog', $id_blog, PDO::PARAM_INT);
                        $stmt->execute();
                        }catch(PDOException $exception){ 
                        echo "Error: " . $exception->getMessage();
                        }
                ?>

我建议您将SQL设置为如下:

UPDATE BLOG SET 
vistoblog = vistoblog + 1
WHERE id_blog = :id_blog
原因是为了避免一个错误。如果两个人同时访问该页面,并且两个PHP线程都读取vistoblog值123,并添加1,然后都尝试将其增加到值124,该怎么办


通过使用上面的表达式,您不必读取当前值,并且可以避免出现这样的竞争条件。

我建议您的SQL如下所示:

UPDATE BLOG SET 
vistoblog = vistoblog + 1
WHERE id_blog = :id_blog
原因是为了避免一个错误。如果两个人同时访问该页面,并且两个PHP线程都读取vistoblog值123,并添加1,然后都尝试将其增加到值124,该怎么办


通过使用上面的表达式,您不必读取当前值,也可以避免出现这样的竞争条件。

在这种形式下,计数器不会执行任何操作,不会显示任何错误,也不会添加新值…很少见我知道错误在哪里…显然,错误只存在于chrome,当我使用firefox或explorer时,更新效果非常好。。chrome显然将其保留在缓存中,因此只有在我重新加载页面时才会看到更新中的更改。再次感谢@Bill Karwin在这种情况下,计数器什么也不做,不显示任何错误,也不添加新的值…很少见我知道错误在哪里…显然错误只出现在chrome上,当我使用firefox或explorer时,更新效果很好。。chrome显然将其保留在缓存中,因此只有在我重新加载页面时才会看到更新中的更改。再次感谢你@Bill Karwin