单个查询生成2行

时间:2018-11-30 01:34:22

标签: php mysql sql

我有一个PHP代码,需要在db中插入值。但是,当我在数据库上运行脚本时,它将生成具有相同值的2行。如果我直接在数据库上运行查询,它将生成1行(应该是)。我的代码有什么问题?

<?php

$id = htmlspecialchars($_GET["id"]);
$username = htmlspecialchars($_GET["username"]);
$score = htmlspecialchars($_GET["score"]);
$region = htmlspecialchars($_GET["region"]);
$elapsed_time = htmlspecialchars($_GET["elapsed_time"]);
$acquired_date = htmlspecialchars($_GET["acquired_date"]);

// Create connection
$conn = new mysqli("localhost", "root", "mypassword", "test");
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "INSERT INTO Utenti (username, region, score, elapsed_time, acquired_date) VALUES (".chr(34).$username.chr(34).",".chr(34).$region.chr(34).",".$score.",".chr(34).$elapsed_time.chr(34).",".chr(34).$acquired_date.chr(34).");";
$result = $conn->query($sql);

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

$conn->close();
?> 

这是我的表配置:

    CREATE TABLE `Utenti` (
  `id` int(11) NOT NULL,
  `username` text COLLATE utf8_unicode_ci NOT NULL,
  `region` text COLLATE utf8_unicode_ci NOT NULL,
  `score` int(11) NOT NULL,
  `elapsed_time` time NOT NULL,
  `acquired_date` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我这样加载变量:

my_url/insert.php?username=Example&region=France&score=200&elapsed_time=01:15:00&acquired_date=2018-11-30 22:40:00

1 个答案:

答案 0 :(得分:0)

您确实在代码中两次运行了查询。

首先在声明SQL语句之后:

$result = $conn->query($sql);

第二个if块:

if ($conn->query($sql) === TRUE) {

您最好使用类似:

的结构
$status = $conn->query($sql);
if ($status === TRUE) {
    echo "Inserted";
...