En utilisant la commande de mise à jour, je veux changer le type_name
pour une entrée spécifique dans la base de données, mais il change le type_name
pour toutes les entrées avec le même type_id
.Pourquoi ma commande Update met-elle à jour tous les champs ayant le même ID?
J'ai besoin de seulement changer type_name
de cette entrée individuelle, et non le type_name
qui est associé à toutes les entrées avec le même type_id
.
J'ai une requête de mise à jour:
$sql = 'UPDATE photos
LEFT JOIN types
ON photos.type_id = types.type_id
SET photos.photo_title = $_POST['photo_title'],
types.type_name = $_POST['type_name']
WHERE photos.photo_id = 3';
est ici la forme que je utilise:
<form name="form1" method="post" action="">
<input name="photo_title" type="text" value=""/>
<textarea name="type_name"></textarea>
<input type="submit" name="update" value="Update entry" />
</form>
Voilà ma structure de base de données:
TABLE Photos
photo_id CLÉ PRIMAIRE
photo_title
type_id FOREIGN KEY
types TABLE
type_id PRIMARY KEY
nom_type
Alors, comment voulez-vous identifier la « entrée individuelle » de la table des types?Votre SQL indique que toutes les lignes dans les types avec le type_id donné doivent être mises à jour - comment identifiez-vous le seul qui doit être mis à jour, par rapport à ceux qui ne doivent pas l'être? –
Votre code est horrible de plusieurs façons que je peux compter. Utilisez une clé primaire pour les mises à jour. N'INCLUEZ PAS DE VARIABLES POSTALES DANS VOTRE SQL! DÉJÀ! Découvrez ce que signifie l'injection SQL et comment utiliser les paramètres. – SpliFF
ouais je sais spliff. Je l'ai juste fait ici pour le rendre plus facile à comprendre ce que j'essaye de faire. J'utilise en fait une instruction préparée et lie mes variables, mais je ne voulais pas la rendre plus confuse pour les personnes qui ne comprennent pas les instructions préparées. – zeckdude