Php 不允许在mysql表中插入同一行数据

Php 不允许在mysql表中插入同一行数据,php,mysql,Php,Mysql,假设您有一个站点,用户可以提交他们的姓名以参加某些课程。用户将填写一张表单,然后点击提交,他们的姓名和电话号码将进入mysql数据库中的一个表。我想做的是,通过检查电话号码是否相同,防止用户提交其姓名两次(我知道这样做很愚蠢,但我只是举个例子)。那么我该怎么办?我正在使用此方法将表单数据插入数据库: $pdo = new PDO('mysql:host=localhost;dbname=form', 'formuser', 'password'); $fname = $_REQU

假设您有一个站点,用户可以提交他们的姓名以参加某些课程。用户将填写一张表单,然后点击提交,他们的姓名和电话号码将进入mysql数据库中的一个表。我想做的是,通过检查电话号码是否相同,防止用户提交其姓名两次(我知道这样做很愚蠢,但我只是举个例子)。那么我该怎么办?我正在使用此方法将表单数据插入数据库:

    $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> 一点也不。