0

我知道此站点上发布了针对此主题的各种提供的解决方案,并且我检查了(并使用了)其中一些解决方案。尽管如此,我还是不明白为什么下面的代码不起作用,可能是因为我是 php 和 sql 编程的初学者;-(

该代码应该在表(人员)中添加具有 3 个字段(名字、姓氏、年龄)的记录,但前提是该记录尚不存在。因此,将对现有的 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

4 回答 4

2

您必须{}在查询中使用数组值

$query ="SELECT FirstName,LastName FROM persons
WHERE FirstName='{$data[1]}' AND LastName='{$data[2]}'";

此外,您的INSERT查询运行mysqliSELECT查询运行在mysql. 您必须只使用 1 而不是两者都使用,并将下面的代码与mysqli.

$result = mysqli_query($con,$query);
if($result && mysqli_num_rows($result) > 0) 
{
    echo " <br> record exist";
}
于 2013-06-13T10:29:30.993 回答
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;
于 2013-06-13T12:02:20.947 回答
0

从数据库的角度来看,通过为必要的字段设置唯一键来修改您的 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'
于 2014-01-14T10:07:04.187 回答
0

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

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

于 2013-06-13T12:11:09.163 回答