Php SQL查询更新两次

Php SQL查询更新两次,php,mysql,Php,Mysql,我正在尝试更新列并将其值增加1 我在本地服务器上尝试了这段代码,但实际上它增加了2,我不知道为什么(我在稍后检查列值时发现了这一点) 定义(“主机”、“本地主机”); 定义(“用户名”、“根”); 定义(“密码”、“根”); 定义(“DB”、“dbname”); $con=新的mysqli(主机、用户名、密码、数据库); 如果($con->connect\u errno){ echo“无法连接到MySQL:”.$mysqli->connect\u错误; 退出(); } $query=“UPDAT

我正在尝试更新列并将其值增加1

我在本地服务器上尝试了这段代码,但实际上它增加了2,我不知道为什么(我在稍后检查列值时发现了这一点)

定义(“主机”、“本地主机”);
定义(“用户名”、“根”);
定义(“密码”、“根”);
定义(“DB”、“dbname”);
$con=新的mysqli(主机、用户名、密码、数据库);
如果($con->connect\u errno){
echo“无法连接到MySQL:”.$mysqli->connect\u错误;
退出();
}
$query=“UPDATE`active\u games`SET current\u question=current\u question+1,其中pin\u code=“$pin_码;
如果($result=$con->query($query)){
回显“更新成功!
”; } 否则{ echo“出现错误..
”; } $con->close();
如果是Chrome预加载功能。您可以尝试更改页面以接受POST not GET,并更改链接以反映它

因为POST请求假定您正在发送一些重要的内容,所以chrome没有使用预加载功能。至少,当我以前遇到这个问题时,它没有这样做

尝试将代码更改为此

define("HOST", "localhost");
define("USERNAME", "root");
define("PASSWORD", "root");
define("DB", "dbname");
if ($_SERVER['REQUEST_METHOD'] === 'POST') && (isset($_POST['DOIT'])) {
    $con = new mysqli(HOST, USERNAME, PASSWORD, DB);

    if ($con->connect_errno) {
      echo "Failed to connect to MySQL: " . $mysqli->connect_error;
      exit();
    }

    $query = "UPDATE `active_games` SET current_question = current_question + 1 WHERE pin_code = " . $pin_code;
      if ($result = $con->query($query)) {
        echo "Update successfully! <br />";
      }
      else {
        echo "There was an error.. <br />";
      }

    $con->close();
}else{
    echo '
    <form action="?" method="post">
        <input type="hidden" name="DOIT" value=1>
        <input type="submit" value="Update Current Question">
    </form>';
}
定义(“主机”、“本地主机”);
定义(“用户名”、“根”);
定义(“密码”、“根”);
定义(“DB”、“dbname”);
如果($\u服务器['REQUEST\u METHOD']=='POST')&&(isset($\u POST['DOIT'])){
$con=新的mysqli(主机、用户名、密码、数据库);
如果($con->connect\u errno){
echo“无法连接到MySQL:”.$mysqli->connect\u错误;
退出();
}
$query=“UPDATE`active_games`SET current_question=current_question+1,其中pin_code=”.$pin_code;
如果($result=$con->query($query)){
回显“更新成功!
”; } 否则{ echo“出现错误..
”; } $con->close(); }否则{ 回声' '; }

我刚刚添加了一个if来验证POST请求。

PHP中没有任何东西会两次更新表。可能是您的触发器导致了更新,或者您的PHP代码被调用了两次?什么是
current\u question
,您确定不会调用代码两次吗?您是否有一个
db
类和一个函数来处理
问题的逻辑?在哪里调用$pin_代码?分享一些详细的代码。您共享的代码没有任何东西可以重新加载页面或调用两次更新查询。这就是全部代码。我正在使用phpmydmin,在那里我看到专栏更新了两次。你在多个浏览器中测试过它吗?可能是因为y是chrome浏览器的预加载“功能”?实际上现在还没有收到任何POST或GET请求。该页面的目的只是更新数据库(我在一个更大的项目中遇到了这个问题,该页面只是为了解决这个问题)/@MaorBenezri如果您使用Chrome通过键入url并点击enter来加载页面,Chrome会向您的页面发送GET请求。不幸的是,Chrome没有发送任何与预加载不同的内容。
define("HOST", "localhost");
define("USERNAME", "root");
define("PASSWORD", "root");
define("DB", "dbname");
if ($_SERVER['REQUEST_METHOD'] === 'POST') && (isset($_POST['DOIT'])) {
    $con = new mysqli(HOST, USERNAME, PASSWORD, DB);

    if ($con->connect_errno) {
      echo "Failed to connect to MySQL: " . $mysqli->connect_error;
      exit();
    }

    $query = "UPDATE `active_games` SET current_question = current_question + 1 WHERE pin_code = " . $pin_code;
      if ($result = $con->query($query)) {
        echo "Update successfully! <br />";
      }
      else {
        echo "There was an error.. <br />";
      }

    $con->close();
}else{
    echo '
    <form action="?" method="post">
        <input type="hidden" name="DOIT" value=1>
        <input type="submit" value="Update Current Question">
    </form>';
}