【问题标题】:SQL query inserting twiceSQL查询插入两次
【发布时间】:2018-02-03 15:15:50
【问题描述】:

我正在创建一个测验页面,该页面会提出问题,最后会显示最高分表。我正在通过 Ajax 访问此页面以插入用户名和分数,并且它插入了两次。

<?php
    $servername = "localhost";
    $username = "root";
    $password = "pswd";
    $dbname = "mydb";
    $toJsonArr = array();

    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
        die("Connection failed: " . $conn->connect_error);
    } 

    if (isset($_GET["username"])) {
        $username = $_GET["username"];
        $score = $_GET["score"];

        $sql = "INSERT INTO `fullstackQuiz` (`id`, `place`, `username`, `points`, `now`) VALUES (NULL, '0', '$username', '$score', CURRENT_TIMESTAMP);";
        $result = $conn->query($sql);

        if ($conn->query($sql) === TRUE) {
            echo "1";
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }

        $conn->close();

    } else {
        $sql = "SELECT * FROM `fullstackQuiz` ORDER BY `fullstackQuiz`.`points` DESC LIMIT 10";
        $result = $conn->query($sql);

        if ($result->num_rows > 0) {
            // output data of each row
            while($row = $result->fetch_assoc()) {
                  $toJsonArr[] = $row;
            }
        } else {
            echo "0 results";
        }

        echo json_encode($toJsonArr);
        $conn->close();
    }
?>

我的 Ajax 代码:

$.ajax({
  type: "GET",
  url: "sql.php",
  data: { username: "abc", score: "99" },
  success: function(data) {
    console.log("success");
  }
});

每次 Ajax 运行时,由于某种原因,它会创建两次记录。

【问题讨论】:

标签: php mysql sql ajax


【解决方案1】:

您重复了两次$conn-&gt;query($sql)。删除一个,它会工作:

//$result = $conn->query($sql); <== Remove this line.

if ($conn->query($sql) === true) {
    echo "1";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

也不要将 NULL 传递给自动增量 ID,只需将其从查询中排除即可。如果place 字段是数字,则将该值作为不带撇号的数字传递:

$sql = "INSERT INTO `fullstackQuiz` (`place`, `username`, `points`, `now`)
        VALUES (0, '$username', '$score', CURRENT_TIMESTAMP);";

最后,您的查询容易受到 SQL 攻击。请改用参数化查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-23
    • 2023-03-04
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多