Bonjour,
J'ai une erreur MySQL que je ne m'explique pas.
L'erreur est la suivante:
Erreur: 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata du champ '2-' pour la clef 'user'' à la ligne 228.
En effet:
  • J'ai un champ user sur 2 colonnes (id_user et homephone)
  • L'erreur est apparue lorsque j'ai insérer une valeur vide, alors que j'avais déjà une valeur vide. J'ai remplacé les valeurs vides par NULL mais l'erreur persiste.
  • Je ne sais pas comment mettre à NULL toutes les valeurs vides sans avoir à les traiter une par une.

Voici mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function updateAddress(array $data): int
{
	$db = dbConnect();
	extract($data);
	var_dump($data);
 
$sql = <<<SQL
UPDATE dat_addresses
SET address=:address, country=:country, zipcode=:zipcode, locality=:locality, homephone=:homephone, notes=:notes
WHERE id=:id
SQL;
	$array = [':id'=>$id, ':address'=>$address, ':country'=>$country, ':zipcode'=>$zipcode, ':locality'=>$locality, ':homephone'=>$homephone, ':notes'=>$notes, ];
	$stmt = $db->prepare($sql);
	$stmt->execute($array);
	return $stmt->rowCount();
}
Le var_dump de la ligne 5 donne:
array (size=15)
  'id_user' => string '2' (length=1)
  'id' => string '1' (length=1)
  'relation' => string '0' (length=1)
  'familyname' => string 'Nom' (length=5)
  'firstname' => string 'Prénom' (length=5)
  'birthday' => string '1515-09-10' (length=10)
  'address' => string '50 avenue Paul Laurens' (length=36)
  'country' => string 'FR' (length=2)
  'zipcode' => string '00000' (length=5)
  'locality' => string 'ville' (length=5)
  'email' => string '' (length=0)
  'homephone' => string '' (length=0)
  'workphone' => string '' (length=0)
  'GSM' => string '' (length=0)
  'notes' => string '' (length=0)
Par ailleurs après recherche systématique, je n'arrive pas à supprimer l'index sur les colonnes id_user et homephone. J'ai le message
#1553 - Cannot drop index 'user': needed in a foreign key constraint
et je ne trouve pas où est utilisée cette contrainte.