【问题标题】:PHP-Mysql query unnecessarily inserting data twicePHP-Mysql查询不必要地插入数据两次
【发布时间】:2017-07-31 21:10:39
【问题描述】:

我面临的这个问题对我来说很不寻常。我实际上想要做的是通过 HTML 表单将数据插入到 mysql 数据库表中。

我有一个数据库,我正在尝试向其中插入数据,但它总是显示“重复输入错误”。

问题是尽管检查我输入的信息是唯一的,但它显示错误。当我检查我的数据库表时,我可以看到每次条目都将 id 增加 2。我不知道为什么是我的查询插入数据两次并使主键递增2,请帮助我希望一切正常。

我无法解决,请帮帮我。

这是我的表单html代码

<form class="form-horizontal" name="RegisterCandidate" action="../processors/process_register_candidate.php" method="post" enctype="application/x-www-form-urlencoded">
        <div class="form-group">
            <label for="Fname" class="control-label col-sm-4">
                First Name
            </label>
            <div class="col-sm-8">
                <input type="text" class="form-control" name="Fname" tabindex="1" autofocus required placeholder="First Name" />
            </div>
        </div>

        <div class="form-group">
            <label for="Lname" class="control-label col-sm-4">
                Last Name
            </label>
            <div class="col-sm-8">
                <input type="text" class="form-control" name="Lname" tabindex="2"  required placeholder="Last Name" />
            </div>
        </div>

        <div class="form-group">
            <label for="Photo" class="control-label col-sm-4">
                Photograph
            </label>
            <div class="col-sm-8">
                <input type="file" class="form-control" name="Photo" tabindex="3" placeholder="Select Photo" />
            </div>
        </div>
        <div class="form-group">
            <label for="DOB" class="control-label col-sm-4">
                Date of Birth (DD-MM-YYYY)
            </label>
            <div class="col-sm-8">
                <input type="date" class="form-control" name="dob" tabindex="4"  required />
            </div>
        </div>

        <div class="form-group">
            <label for="password" class="control-label col-sm-4">
                Password
            </label>
            <div class="col-sm-8">
                <input type="password" class="form-control" name="password" tabindex="5"  required placeholder="Password" />
            </div>
        </div>

        <div class="form-group">
            <label for="contact" class="control-label col-sm-4">
                Contact No.
            </label>
            <div class="col-sm-8">
                <input type="tel" class="form-control" name="contact" tabindex="6"  required placeholder="Contact Number" />
            </div>
        </div>
        <button type="submit" name="register" class="btn btn-success" style="float:right; margin-right:30%;">
            Register
        </button>
    </form>

这是我的 php-mysql 代码的副本

<?php
require_once "../web_config/web.config.php";

$conn = connect();

$fname = $_POST["Fname"];
$lname = $_POST["Lname"];
$dob = $_POST["dob"];
$password = $_POST["password"];
$contact = $_POST["contact"];

$insert = " INSERT INTO `candidates`
(
`Fname`,
`Lname`,
`dob`,
`password`,
`contact`
) VALUES (
'$fname',
'$lname',
'$dob',
'$password',
'$contact'
)
";
try{
    $st = $conn->query($insert);
    $st->execute();
} catch(PDOException $e) {
    echo "//Failed to insert data due to ".$e->getMessage();
}
echo $fname." ".$lname;
#header("Location:../src/student_login.php");

?>

请帮我解决这个问题。 谢谢。

【问题讨论】:

  • 删除 $st->execute();线再试一次
  • execute 在准备好语句时使用,但 query 直接运行 sql。
  • 您没有在实时环境中使用此代码,是吗?
  • 非常感谢。我的问题已解决。

标签: php mysql pdo duplicates


【解决方案1】:
try{
    $st = $conn->query($insert);
    $st->execute();
} catch(PDOException $e) {
    echo "//Failed to insert data due to ".$e->getMessage();
}

在这段代码中你正在执行你的 $conn->query($insert);插入就足够了 $st 只保存插入查询的结果它不是准备好的语句 删除

$st->execute();

【讨论】:

    【解决方案2】:

    所以,这里有一些问题..

    $conn-&gt;query 如前所述将直接运行代码,因此执行是多余的,但是,您对 SQL 注入非常开放,因此您应该绑定如下我的示例:

    $stmt = $this->conn->prepare("INSERT INTO `candidates`(`Fname`,`Lname`,`dob`,`password`,`contact`) VALUES (?,?,?,?,?)");
    $stmt->execute([$fname,$lname,$dob,$password,$contact]);
    

    此外,您不应该在诸如此类的通用查询上运行try { } catch {}(尤其是如果您在实时环境中,因为每个人都可以看到这些问题以及您自己)。

    附带说明,添加未加密的密码也会给您带来安全问题。你应该看看使用password_hash 文档:http://php.net/manual/en/function.password-hash.php

    【讨论】:

    • 非常感谢...我的问题已经解决,同时也感谢您对您提到的一些安全问题的建议。我肯定会看着他们。再次感谢。
    猜你喜欢
    • 2014-08-23
    • 2014-07-21
    • 2020-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多