2013-06-13 86 views
0

我知道有这个话题在网站上公布各种提供的解决方案中是否存在记录,我检查(并用),其中的一些解决方案。尽管如此,我不明白为什么我的代码不起作用,可能是因为我是一个关于PHP和SQL编程的入门者;-(检查数据库

该代码应该添加一个包含3个字段的记录(FirstName ,姓氏,年龄)表中的(人),但只有在记录不存在,因此在执行上存在的名字和姓氏字段的支票。但在现有记录的情况下,如果语句的条件似乎仍是真正的和现有记录的副本仍然是插入到数据库中。我该怎么提前帮助错过?

感谢。

    //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

'SELECT COUNT(*)FROM人员 WHERE姓= '$数据[1]' AND名字= '$数据[2]'' – NINCOMPOOP

+0

@TheNewIdiot OP使用'mysqli'和'mysql'都为每个查询。 –

+0

为什么你需要先检查? – Strawberry

回答

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"; 
} 
+0

您的解决方案有效,非常感谢! – user165259

+0

@ user165259接受的答案是很好的习惯,当它解决您的问题。 :) –

+0

@ user165259欢迎。 :) –

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; 
0

检查您的网络连接 在第一个查询你在插入时使用 的mysql_query

然后在第二种情况下,你使用 mysqli_query

0

从数据库的角度来看,通过设置UNI修改Person表的设计QUE KEY进行必要的领域,即:

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'