检查mysql数据库中是否已存在数据

时间:2016-07-07 02:33:18

标签: php mysql database

我是PHP的新手,所以我很难解决这个问题。

这是我的代码,它将变量值存储在“已预订”表中的特定表行中。

我想确保如果数据库中已存在所有变量值,则mysql拒绝在数据库表中“预订”插入值。

注意:所有值必须相同才能被拒绝。例如:如果除了一个值之外的所有值都相同,则系统仍应接受插入。

我在下面编写的代码首先检查数据是否已存在于数据库中。如果它存在,则回声“数据已经存在”,如果没有,则将新值插入数据库中。

然而这段代码似乎不起作用,所以我想知道你们是否可以查看我的代码,看看我做错了什么?

     <?php

        $servername = "localhost";
        $name = "root";
        $password = "root";
        $dbname = "my computer";

        // Create connection
        $conn = mysqli_connect($servername, $name, $password, $dbname);
        // Check connection
        if (!$conn) {
           die("Connection failed: " . mysqli_connect_error());
        }



        $query = "SELECT * FROM `booked` WHERE 

        `name` = '{$username}'
        `date` = '{$date}'
        `computer_id` = '{$select3}'
        `start_time` = '{$select1}'
        `end_time` = '{$select2}'
        `room` = '{$room}'

        ";

        $result = mysqli_query($conn, $query);



        if ( mysqli_num_rows ( $result ) > 1 )
        {

        echo "data already exists";

        }




        else
        {
        $sql = "INSERT INTO booked (date, computer_id, name, start_time, end_time, room)
            VALUES ('$date', '$select3', '$username', '$select1', '$select2', '$room')";



        if (mysqli_query($conn, $sql)) {
           echo "New record created successfully";
            } else {
           echo "Error: " . $sql . "<br>" . mysqli_error($conn);
            }

        mysqli_close($conn);

        }
        ?>

3 个答案:

答案 0 :(得分:2)

您忘了将AND关键字放在SQL查询中。像这样更新你的查询,

$query = "SELECT * FROM `booked` WHERE 
        `name` = '{$username}' AND 
        `date` = '{$date}' AND 
        `computer_id` = '{$select3}' AND 
        `start_time` = '{$select1}' AND 
        `end_time` = '{$select2}' AND 
        `room` = '{$room}'
        ";

我们在这里使用AND来匹配所有条件,如果所有条件都匹配,那么它将返回结果。

另一个名为OR的关键字也用于WHERE子句。如果OR在两个条件(WHERE column1=1 OR column2=2)内应用,则任一条件都应匹配以获得结果。

您还可以使用ANDOR的混合。

参考: http://dev.mysql.com/doc/refman/5.7/en/logical-operators.html

答案 1 :(得分:0)

首先尝试在查询的每个条件之后添加AND,此AND运算符将使您的条件对于多个条件的sql可读,运算符还会分离或组合查询的每个条件。现在你需要添加AND而不是OR,因为你需要检查所有列是否存在。

$query = "SELECT * FROM `booked` WHERE 

    `name` = '{$username}' AND
    `date` = '{$date}' AND
    `computer_id` = '{$select3}' AND
    `start_time` = '{$select1}' AND
    `end_time` = '{$select2}' AND
    `room` = '{$room}'

    ";

如果上面的代码不起作用,请尝试这个。使它成为一行以避免空格,并删除单引号'到每个列名或表名,以使其对sql可读。

$query = "SELECT * FROM booked WHERE name = '{$username}' AND date = '{$date}' AND computer_id = '{$select3}' AND start_time = '{$select1}' AND end_time = '{$select2}' AND room = '{$room}'";

答案 2 :(得分:-2)

在您的行中:if(mysqli_num_rows($ result)&gt; 1)

尝试在其上添加等号。所以它应该是

if(mysqli_num_rows($ result)&gt; = 1)