【问题标题】:How to insert data if conditions are correct如果条件正确,如何插入数据
【发布时间】:2018-10-19 10:37:54
【问题描述】:

如果满足条件,如何将数据从 FORM 插入 mysql。

这些是我的代码。

$sql0检查类似数据是否已经存在

$sql1向mysql插入数据

$wirebname   = mysqli_real_escape_string($conn, $_POST["wirebname"]);
$wireaccname = mysqli_real_escape_string($conn, $_POST["wireaccname"]);
$wireacno    = mysqli_real_escape_string($conn, $_POST["wireacno"]);
$wirebranchnumber = mysqli_real_escape_string($conn, $_POST["wirebranchnumber"]);
$swift       = mysqli_real_escape_string($conn, $_POST["swift"]);
$route       = mysqli_real_escape_string($conn, $_POST["route"]);
$state       = mysqli_real_escape_string($conn, $_POST["state"]);
$country     = mysqli_real_escape_string($conn, $_POST["country"]);

$id = $_SESSION['loggedIn_cust_id'];
$sql0 = "
    SELECT wire_benef_id 
    FROM wire_beneficiary".$id." 
    WHERE wirebname='".$wirebname."'
        AND wireaccname='".$wireaccname."'
        AND wireacno='".$wireacno."'
        AND swift='".$swift."'
        AND route='".$route."'
";

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

$success = 0;
if ($result->num_rows > 0) {
    $row = $result->fetch_assoc();
    $wire_account_number = $row["wireacno"];

    if ($wireacno != $wire_account_number) {
        $sql1 = "INSERT INTO wire_beneficiary".$id." 
            VALUES(
                NULL,
                '$wirebname',
                '$wireaccname',
                '$wireacno',
                '$wirebranchnumber',
                '$swift',
                '$route',
                '$state'
                '$country',
                )
        ";

        if (($conn->query($sql1) === TRUE)) {
            $success = 1;
        }
    } else {
        $success = -1;
    }
}

如果帐号已经存在,我想打印一个错误

如果不是,应该写入数据库。

<?php
if ($success == 1) { ?>
    <p id="info"><?php echo "Beneficiary successfully added !\n"; ?></p>
<?php } ?>

【问题讨论】:

  • 您的代码对 sql 注入开放。尝试使用 pdo 或准备好的语句
  • 我会,但你能告诉我如何插入数据吗??
  • 当您通过select 查询检索所需行时,为什么要使用双重检查
  • if ($wireacno != $wire_account_number) { 总是假的
  • 我已经更新了我的答案。现在试试吧

标签: php mysql database if-statement insert


【解决方案1】:

您正在使用无用的双重检查。当您通过select 查询检索所需的行时,if ($wireacno != $wire_account_number) { 始终返回 false。如果它if ($result-&gt;num_rows &gt; 0) { 返回 true,那么显然您的帐户已经存在并且您不需要再次检查。所以试试这段代码

if ($result->num_rows == 0) {

    $sql1 = "INSERT INTO wire_beneficiary".$id." VALUES(
                NULL,
                '$wirebname',
                '$wireaccname',
                '$wireacno',
                '$wirebranchnumber',
                '$swift',
                '$route',
                '$state'
                '$country',
            )";

    if (($conn->query($sql1) === TRUE)) {
        $success = 1;
    }
}
else {
    $success = -1;
 }

}

如上所述,您的代码易受攻击,并且对 sql 注入开放以尝试使用 PDO 或 Prepared 语句

【讨论】:

  • @comphonia 抱歉。打字错误。我清楚地错过了那条线。感谢您的指示
【解决方案2】:

您可以将数据库中的“帐号”列作为主键。 因此,当您尝试从 db 插入相同的帐号时,您将获得主键违规异常。

(PRIMARY KEY 约束唯一标识表中的每条记录。 主键必须包含 UNIQUE 值,并且不能包含 NULL 值。 一张表只能有一个主键,主键可能由单个或多个字段组成。参考this的主键)

您可以使用该错误来设置插入是否成功。

【讨论】:

  • 这意味着我必须将其添加为自动列,并且它们只能是一个自动列。 id 也会自动递增吗??
  • 没有。它不是一个自动增量列。我已经通过添加参考来了解主键来编辑答案。通过那个。作为主要你可以添加唯一值。那么你不能添加具有相同acc no的条目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 2011-01-14
  • 2021-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
相关资源
最近更新 更多