2013-06-13 3 views
0

Я знаю, что на этом сайте есть различные предлагаемые решения для этой темы, и я проверил (и использовал) некоторые из этих решений. Тем не менее, я не могу понять, почему мой код ниже не работает, возможно, потому, что я стартер в отношении программирования php и sql ;-(Проверить, существуют ли записи в базе данных

Код должен добавить запись с тремя полями (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

'SELECT COUNT (*) FROM лиц WHERE ПгвЬЫата = '$ данных [1] И LastName = '$ data [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

С точки зрения базы данных измените дизайн стола Person, установив UNI 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' 
Смежные вопросы