从MySQL获取PHP的值,如果没有记录 - 插入它

时间:2017-07-20 03:49:30

标签: php mysql sql

我已获得以下代码:

<?php
include 'payment/dbConfig.php';
$email = $_GET['email'];
$account = $_GET['account'];
if($email != ''){
    $sql = "SELECT command FROM bots WHERE email='".$email."' AND account='".$account."' limit 1";;
    $result = $db->query($sql);
    if ($result->num_rows > 0) {
        // output data of each row
        while($row = $result->fetch_assoc()) {
            $value = $row["command"];
        }
    }

    if($value != ''){
       echo $value;
       $sql = "UPDATE `bots` SET command='' WHERE email='".$email."' AND account='".$account."'";
       $db->query($sql);
    }else{
        $sql = "INSERT INTO `bots`(`email`, `account`) VALUES ('".$email."','".$account."')";
        $db->query($sql);
    }
}
?>

这看起来确实很乱,而且这种做法并不合适 具体来说,它会无休止地将相同的'email''account'添加到数据库中,即使只有在$value不等于空虚时才应该这样做。

我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以用更少的代码执行此操作。

if ($result->num_rows > 0) {
    // Update
    $sql = "UPDATE `bots` SET command='' WHERE email='".$email."' AND account='".$account."'";
   $db->query($sql);
} else {
    // Insert
    $sql = "INSERT INTO `bots`(`email`, `account`) VALUES ('".$email."','".$account."')";
    $db->query($sql);
}

注意:您正在查询中直接传递用户输入($ _GET),Sanitize所有用户输入($ _GET,$ _POST)并在执行任何查询之前检查SQL Injection