2011-08-25 3 views
3

Je reçois l'erreur suivante lors de l'exécution requête de base de données:erreur de base de données de manipuler CodeIgniter

Error Number: 1062 

Duplicate entry '1' for key 1 

INSERT INTO `message_template` (`id`, `name`, `subject`, `detail`, `type`, 
           `status`, `create_date`) 
VALUES (1, 'adaa', '', 'dss', 'SMS', 'Active', '2011-08-25 19:34:08') 

Filename: C:\AppServ\www\ci\system\database\DB_driver.php 

Line Number: 330 

Comment puis-je obtenir le numéro d'erreur (par exemple 1062) à handlle erreur?

Merci

Répondre

9

C'est une erreur provenant de la base de données.

Vous pouvez cacher dans /application/config/database.php

$db['default']['db_debug'] = FALSE; 

Sinon, vous pouvez en prendre soin. Je suggère simplement de vérifier si la valeur existe déjà:

$this->db->where('id', $id); 
$query = $this->db->get('message_template'); 

$data = array(
    'id' => $id, 
    'name' => $name, 
    'subject' => $subject, 
    'detail' => $detail, 
    'type' => $type, 
    'status' => $status, 
    'create_date' => $create_date 
); 

if($query->num_rows() > 0) 
{ 
    // the line already exists, so update 
    $this->db->where('id', $id); 
    $this->db->update('message_template', $data); 
} 
else 
{ 
    $this->db->insert('message_template', $data); 
} 

ou, si vous avez la volonté d'utiliser des requêtes brutes, cela devrait être un peu plus rapide (je vous inquiétez pas vraiment une recherche par ID)

$sql = "INSERT INTO message_template 
     (id, name, subject, detail, type, status, create_date) 
     VALUES (1, " + $this->db->escape($name) + ", " + $this->db->escape($subject) + ", " + $this->db->escape($detail) + ", " + $this->db->escape($type) + ", " + $this->db->escape($status) + ", " + $this->db->escape($create_date) + ") 
    ON DUPLICATE KEY UPDATE name=" + $this->db->escape($name) + ", subject=" + $this->db->escape($subject) + ", detail=" + $this->db->escape($details) + ", type=" + $this->db->escape($type) + ", status=" + $this->db->escape($status) + ", create_date=" + $this->db->escape($create_date) + ";"; 

Sinon, vérifiez DataMapper ORM, ainsi toutes les choses de votre base de données sont automatiquement prises en charge.

Questions connexes