Question

Je reçois l'erreur suivante et j'ai passé des heures à regarder et ne peut pas comprendre pourquoi!

ERREUR: Vous avez une erreur dans votre syntaxe SQL; consultez le manuel qui correspond à votre version du serveur MySQL pour la bonne syntaxe à utiliser près doej2' « primaire = », = secondaire « 1 » où id = « 2 » » à la ligne 1

Voici mon code:

<?php
if (isset($_POST[Edit])){

$id = $_POST['id'];
$primary = $_POST['primary'];
$secondary = $_POST['secondary'];

$query = mysql_query("UPDATE eventcal SET primary='$primary', secondary='$secondary' WHERE id='$id'");

if (!$query) {
  $_SESSION['alert'] = 'ERROR: ' . mysql_error();
}

}?>

Et voici ma structure de la table pour la table eventcal:

 CREATE TABLE `eventcal` (
 `id` int(10) unsigned NOT NULL auto_increment,
 `region` tinyint(3) unsigned NOT NULL,
 `primary` varchar(25) NOT NULL,
 `secondary` tinyint(1) NOT NULL,
 `eventDate` date NOT NULL,
 PRIMARY KEY  (`id`),
 KEY `primary_2` (`primary`),
 KEY `secondary` (`secondary`),
 CONSTRAINT `eventcal_ibfk_1` FOREIGN KEY (`primary`) REFERENCES `users` (`username`) ON UPDATE CASCADE
 ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8

Quelqu'un peut-il voir ce que je suis absent? Merci!

Était-ce utile?

La solution

« primaire » est un mot réservé dans MySQL. Vous pouvez mettre les tiques autour d'elle pour l'utiliser correctement (ainsi que les autres domaines:

$query = mysql_query("UPDATE `eventcal` SET `primary`='$primary', `secondary`='$secondary' WHERE `id`='$id'");

Autres conseils

« primaire » est un mot réservé MySQL. De la documentation:

Les mots réservés sont autorisés comme identifiants si vous les citer comme décrit dans la section 8.2, « noms de schéma d'objet ».

Pire que l'erreur de syntaxe est le trou SQL-injection:

Changer ceci:

entrer image description ici horreur de codage

$id = $_POST['id'];
$primary = $_POST['primary'];
$secondary = $_POST['secondary'];

Dans ce code

$id = mysql_real_escape_string($_POST['id']);
$primary = mysql_real_escape_string($_POST['primary']);
$secondary = mysql_real_escape_string($_POST['secondary']);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top