php - повторяющаяся запись - PullRequest
0 голосов
/ 21 января 2012

что делать, если запись удваивается?

<?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'**

Ответы [ 4 ]

3 голосов
/ 21 января 2012

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

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

1 голос
/ 21 января 2012

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

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

0 голосов
/ 21 января 2012

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

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

0 голосов
/ 21 января 2012

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

Так что, если поле первичного ключа имеет значение subject_id, вам нужно проверитьесли это уже существует, выполнив запрос выбора, а затем функцию 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
}
...