我正在创建一个收集数据并使用php发送到数据库的表单,其中包含我上网的代码片段。
$con=mysqli_connect("localhost","root","famakin","k");
if(mysqli_connect_errno())
{
echo"FailedtoconnecttoMySQL:".mysqli_connect_error();
}
$sql="INSERT INTO transactions(Username,Insured_Name,combined,Residential_Address,Telephone,Email,Make_Of_Car,Model,Engine_Number,Year_Of_Manufacture,Chassis_Number,Vehicle_Class,Colour,Registeration_Number,Product_Type,Premium,Policy_Number,Start_Date,Expiry_Date,Date_Begin,Type_Of_Insurance,Status, Transaction_id)VALUES('$_POST[Username]','$_POST[Insured_Name]','$_POST[combined]','$_POST[Residential_Address]','$_POST[Telephone]','$_POST[Email]','$_POST[Make_Of_Car]','$_POST[Model]','$_POST[Engine_Number]','$_POST[Year_Of_Manufacture]','$_POST[Chassis_Number]','$_POST[Vehicle_Class]','$_POST[Colour]','$_POST[Registeration_Number]','$_POST[Product_Type]','$_POST[Premium]','$_POST[Policy_Number]','$_POST[Date]','$_POST[Date_Expiry]','$_POST[Date_Begin]','$_POST[Type_Of_Insurance]','$_POST[Status]','$_POST[Transaction_id]')";
if(!mysqli_query($con,$sql))
{
die('Error:'.mysqli_error($con));
}
mysqli_close($con);
这适用于将详细信息插入到数据库中,但我想检查一下我是否存在插入数据库的用户名,请问我该如何处理这个问题呢?
问候
答案 0 :(得分:3)
主要有两种方法,主要是......
SELECT
之前,INSERT
来自数据库。如果SELECT
找到了记录,请不要执行INSERT
,而是相应地回复用户。UNIQUE
constraint放在需要在表格中唯一的列(或列集)上。这会导致INSERT
失败,代码必须捕获并处理该失败并相应地响应用户。第二个选项将责任完全放在数据库本身上,如果有任何其他事情,如果要使用该数据库并且需要保持相同的责任,这一点很重要。
此外, 这很重要 ,请注意您的代码是开放的SQL注入攻击,它允许用户执行自己的代码在您的服务器上。您需要read up on that so you can protect your application。
答案 1 :(得分:3)
在这里,您可以通过mysqli_num_rows()
:
$username = mysqli_real_escape_string($con, $_POST['Username']);
$check_select = mysqli_query("SELECT * FROM `transactions` WHERE Username = '$username'");
$numrows=mysqli_num_rows($check_select);
if($numrows > 0){
// do something
}
else{
// do something else
}
虽然还有其他方法可以做到这一点,但这只是一个例子。
您可以通过将列设置为UNIQUE来避免这种情况。
答案 2 :(得分:2)
在INSERT之前执行SELECT查询。如果存在具有该用户名的记录,则不要插入记录。
答案 3 :(得分:1)
在您插入一个之前,您要查询它是否存在(请参阅Google了解如何" Select data from Database PHP")。
如果select count(*) from Transactions.... where Username =..
返回0
以外的其他内容,则表示已使用该用户名。
注意:我对您将POST
- 参数直接包含在SQL-Query字符串中的事实有更大的担忧,并建议您阅读有关" SQL Injection PHP"的内容。