如何在插入php之前检查数据库中是否存在记录

时间:2014-10-13 13:57:18

标签: php

我正在创建一个收集数据并使用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);

这适用于将详细信息插入到数据库中,但我想检查一下我是否存在插入数据库的用户名,请问我该如何处理这个问题呢?

问候

4 个答案:

答案 0 :(得分:3)

主要有两种方法,主要是......

    在尝试SELECT之前,
  1. INSERT来自数据库。如果SELECT找到了记录,请不要执行INSERT,而是相应地回复用户。
  2. a UNIQUE constraint放在需要在表格中唯一的列(或列集)上。这会导致INSERT失败,代码必须捕获并处理该失败并相应地响应用户。
  3. 第二个选项将责任完全放在数据库本身上,如果有任何其他事情,如果要使用该数据库并且需要保持相同的责任,这一点很重要。

    此外, 这很重要 ,请注意您的代码是开放的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"的内容。

相关问题