检查数据库中是否存在记录

时间:2013-06-13 10:27:03

标签: php mysql

我知道在本网站上发布了有关此主题的各种解决方案,我检查(并使用了)其中一些解决方案。不过,我无法弄清楚为什么我的代码不起作用,可能是因为我是关于php和sql编程的首发; - (

代码应该在表(人员)中添加包含3个字段(FirstName,LastName,Age)的记录,但前提是该记录尚不存在。因此,将检查现有的FirstName和Lastname字段。但是在现有记录的情况下,if语句的条件似乎仍然是真的,并且现有记录的副本仍然插入到数据库中。我错过了什么?

提前感谢您的帮助。

                    //check whether item does not exist in database
        $query ="SELECT FirstName,LastName FROM persons
        WHERE FirstName='$data[1]' AND LastName='$data[2]'";
        $result = mysql_query($query);
        if($result && mysql_num_rows($result) > 0) 
        {
            echo " <br> record exist";
        }
        else
        {   
        $theage = (int)$data[3]; //! for conversion of integer values
                $sql="INSERT INTO persons (FirstName, LastName, Age)
                 VALUES ('$data[1]','$data[2]','$theage')";
        if (!mysqli_query($con,$sql))
            {
                die('Error: ' . mysqli_error($con));
            }
        }

4 个答案:

答案 0 :(得分:2)

您必须在查询

中使用{}数组值
$query ="SELECT FirstName,LastName FROM persons
WHERE FirstName='{$data[1]}' AND LastName='{$data[2]}'";

INSERT查询也会在mysqli上运行,SELECT查询会在mysql上运行。您只需使用1而不是两者,并使用下面的代码mysqli

$result = mysqli_query($con,$query);
if($result && mysqli_num_rows($result) > 0) 
{
    echo " <br> record exist";
}

答案 1 :(得分:1)

可能此查询会对您有所帮助:

INSERT INTO persons (FirstName, LastName, Age)
SELECT * FROM (SELECT FirstName,LastName) AS tmp
WHERE NOT EXISTS (
    SELECT FirstName, LastName FROM persons WHERE WHERE FirstName='$data[1]' AND LastName='$data[2]'
) LIMIT 1;

答案 2 :(得分:0)

检查您的连接 在您使用的第一个查询中 的mysql_query

然后在插入时使用的第二种情况 mysqli_query

答案 3 :(得分:0)

从数据库的角度来看,通过为必要字段设置UNIQUE KEY来修改Person表设计,例如:

    CREATE TABLE `Persons` (
    `id` int(11) NOT NULL AUTO_INCREMENT,
    `FirstName` varchar(255) NOT NULL,
    `LastName` varchar(255) NOT NULL,
    PRIMARY KEY (`id`),
    UNIQUE KEY `unique_FirstName_LastName` (`FirstName`,`LastName`) USING BTREE
    )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

执行正常插入,处理重复错误

[Err] 1062 - Duplicate entry 'jk-kenneth' for key 'unique_FirstName_LastName'