Php 不允许在mysql表中插入同一行数据
假设您有一个站点,用户可以提交他们的姓名以参加某些课程。用户将填写一张表单,然后点击提交,他们的姓名和电话号码将进入mysql数据库中的一个表。我想做的是,通过检查电话号码是否相同,防止用户提交其姓名两次(我知道这样做很愚蠢,但我只是举个例子)。那么我该怎么办?我正在使用此方法将表单数据插入数据库:Php 不允许在mysql表中插入同一行数据,php,mysql,Php,Mysql,假设您有一个站点,用户可以提交他们的姓名以参加某些课程。用户将填写一张表单,然后点击提交,他们的姓名和电话号码将进入mysql数据库中的一个表。我想做的是,通过检查电话号码是否相同,防止用户提交其姓名两次(我知道这样做很愚蠢,但我只是举个例子)。那么我该怎么办?我正在使用此方法将表单数据插入数据库: $pdo = new PDO('mysql:host=localhost;dbname=form', 'formuser', 'password'); $fname = $_REQU
$pdo = new PDO('mysql:host=localhost;dbname=form', 'formuser', 'password');
$fname = $_REQUEST['fname']; //first name from the form
$lname = $_REQUEST['lname']; //last name from the form
$pnumber = $_REQUEST['pnumber'] //phone number from the form
$query = 'INSERT INTO list SET
firstname = "' . $fname . '",
lastname = "' . $lname . '",
phonenumber ="' . $pnumber . '",
date = CURDATE()';
$pdo->exec($query);
我知道这不是一种将数据插入数据库的安全方法。我再次尝试找出一种方法,然后部署更好的解决方案来提交数据。首先,您需要检查电话号码
如果(设置($_POST['your_button']))
{
$phone=$\u POST['phonenumber'];
$query=“从phonenumber='$phone''的列表中选择*;
$result=mysql\u query($query)或die(mysql\u error());
$row=mysql\u fetch\u数组($result);
如果($row>0){
回显“电话号码存在!”}
否则{ $fname=$\u请求['fname'];//表单中的名字
$lname=$\u请求['lname'];//表单中的姓氏
$pnumber=$\u请求['pnumber']//表单中的电话号码
$query='插入列表集
firstname=“”。$fname.”,
lastname=“”.$lname.”,
phonenumber=“”。$pnumber.”,
日期=CURDATE()';
$pdo->exec($query);
}正如您在问题中所说的,您与表的通信是不安全的 但为了回答您的问题,下面是一个示例查询:
SELECT IF(COUNT(*) > 0, TRUE, FALSE)
FROM list
WHERE firstname = $fname
AND lastname = $lname
AND phonenumber = $pnumber
我不熟悉
php
,也许你可以解决这个问题。如果有重复的名字、姓氏和电话号码,查询将输出TRUE
。如果查询输出TRUE
,你可以阻止将记录插入到表中。使用pdo并不意味着你可以安全地避免sql注入。你的代码是stiI’很容易受到sql注入的影响您需要使用prepared语句正如我所说的,我知道这段代码根本不安全。为了简化代码,我跳过了prepared语句(以及其他安全内容)。但是感谢您告诉我这个疯狂的想法。如果您想查看表中是否已经存在数据,请尝试SELECT
ing它。SELECT COUNT(*)从列表中phonenumber=?
。引入注入问题并不是简化事情,而是相反。您还可以从更好的错误处理中获益:@hakre。我不打算真正地进行这种编码。我只是希望我的代码简短。就是这样,不要将mysql\ucode>与PDO混合使用。因此,不要使用mysql\ucode>e> 一点也不。