我知道在本网站上发布了有关此主题的各种解决方案,我检查(并使用了)其中一些解决方案。不过,我无法弄清楚为什么我的代码不起作用,可能是因为我是关于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));
}
}
答案 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'