我正在创建一个表单,该表单使用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);
这适用于将详细信息插入数据库,但我想检查(例如)我插入数据库的用户名是否存在,请我如何使用我现有的用户名?
关于
主要有两种方法,本质上。。。
- CCD_ 1,然后再尝试CCD_。如果
SELECT
找到了记录,则不执行INSERT
,而是相应地响应用户 - 在表中需要唯一的列(或列集)上放置
UNIQUE
约束。这将导致INSERT
失败,代码必须捕获并处理该失败并相应地响应用户
第二种选择将责任完全放在数据库本身上,如果要使用该数据库并需要维护同样的责任,那么这一点非常重要。
此外,,这一点很重要,请注意,您的代码容易受到SQL注入攻击,这允许用户在您的服务器上执行自己的代码。您需要了解这些信息,以便保护您的应用程序。
在这里,您可以通过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来避免这种情况。
- 顺便说一下,您当前的代码对SQL注入是开放的
使用准备好的语句,或将PDO与准备好的声明一起使用、它们更安全
只需在INSERT之前执行SELECT查询。如果存在具有该用户名的记录,则不要插入该记录。
在插入之前,您需要查询它的存在(请参阅谷歌关于如何"从数据库PHP中选择数据")。
如果select count(*) from Transactions.... where Username =..
返回的不是0
,则用户名已被占用。
注意:我更担心的是,您将SELECT
0-参数直接包含在SQL查询字符串中,并建议您阅读一些关于"SQL注入PHP"的内容。