我是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);
}
?>
答案 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
)内应用,则任一条件都应匹配以获得结果。
您还可以使用AND
和OR
的混合。
参考: 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)