2012-01-21 4 views
0

Что делать, если запись удваивается?php - дублировать запись

<?php 
require_once('auth.php'); 
session_start(); 
$exam = $_SESSION['exam']; 
$subject_id = $_SESSION['exam']; 
$_SESSION['sub'] = $subject_id; 
$subject_title = $_POST['subject_title']; 
$subject_description = $_POST['subject_description']; 
$con = mysql_connect("localhost","root",""); 
if (!$con) 
{ 
die('Could not connect: ' . mysql_error()); 
} 
mysql_select_db('db_compre', $con); 
$sql = "INSERT INTO examsubjectrecord_table(subject_id , subject_title , 
     subject_description) 
     VALUES ('$subject_id','$subject_title', '$subject_description')"; 

if (!mysql_query($sql,$con)) 
{ 
die('Error: ' . mysql_error()); 
} 
else 
{ 
header("location: addsubject.php?exam=".$exam .""); 
} 
?>` 

Notice: A session had already been started - ignoring session_start() in C:\xampp\htdocs\compre\admin\addsubjectacc.php on line 4 
**Error: Duplicate entry '1' for key 'PRIMARY'** 

ответ

3

Это зависит от используемой вами бизнес-логики приложения.

Вы можете уведомить пользователя о дублирующейся записи или тихо обновить информацию с помощью выражения INSERT ... ON DUPLICATE KEY UPDATE ... SQL.

0

В принципе, вы сначала захотите проверить, существует ли значение, которое вы пытаетесь вставить в поле первичного ключа.

Так что если поле первичного ключа subject_id, вам нужно проверить, существует ли это, выполнив запрос select, за которым следует функция PHP mysql_num_rows. Например:

$subject_id = 1337; 
$check = mysql_query("SELECT `subject_id` FROM `examsubjectrecord_table` WHERE `subject_id`=" . $subject_id); 

// See if anything was returned 
if(mysql_num_rows($check) > 0) { 
    // We have something with this subject_id already! 
    echo "Cannot insert duplicate subject!"; 
} else { 
    // All clear, run your INSERT query here 
} 
+0

@MichaelMior Если вы хотите доставить половину работы и не строить никаких проверок и возвращать ERRORS, то да ... Думаю, вы могли бы опустить этот шаг. Однако, если вы хотите создать подходящее приложение, лучше попытаться предотвратить ошибки на самом деле. – Oldskool

+0

Нет ничего плохого в ошибке, если она ожидается, если она правильно обработана. Особенно, если общий случай не является ошибкой. Вы просто добавляете ненужные накладные расходы и сложность. –

+0

@MichaelMior Это очень точно, моя ошибка, ошибка должна быть обработана ** правильно. Не проверять наличие дубликатов ключей перед тем, как вставить их, не обрабатывать. – Oldskool

0

В какой колонке находится ваш первичный ключ? Я собираюсь предположить, что это subject_id. Это должно быть уникальным для каждой строки в вашей таблице. Самый простой способ обеспечить это - использовать AUTO_INCREMENT, а затем вообще не вводить subject_id. Он будет назначен автоматически.

Если вам нужно узнать, что такое идентификатор новых предметов, вы можете использовать mysql_insert_id.

1

В вашей базе данных у вас есть первичный ключ subject_id, у которого нет дубликатов.

Если вам нужно иметь дубликаты в столбце subject_id, тогда вы должны добавить столбец и установить его как первичный ключ в своей базе данных. Например, добавьте еще один столбец unique_id и установите его в auto_increment и в качестве первичного ключа для идентификации строки.

Смежные вопросы