J'ai une page qui met à jour les données d'un utilisateur spécifique. L'utilisateur a une position, qui est une clé étrangère. La mise à jour de la requête (ci-dessous) fonctionne bien sans la position, mais avec la position, j'obtiens l'erreur suivante.PHP: Erreur sur l'instruction Update avec sous-requête
Requête:
Erreur dans la requête: 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 de « SELECT positionid DE visitorsystem.position OÙ positionName LIKE « % Informat » à la ligne 3
J'ai essayé de me frayer un chemin autour en utilisant la jointure intérieure comme j'ai vu quelques solutions données ici sur la pile mais rien n'a fonctionné. Aucune suggestion ?
Votre sous-requête ne doit pas être entre guillemets, mais entre parenthèses –
** ATTENTION **: Lors de l'utilisation de mysqli, vous devriez utiliser [requêtes paramétrées] (http://php.net/manual/fr/mysqli). quickstart.prepared-statements.php) et ['bind_param'] (http://php.net/manual/fr/mysqli-stmt.bind-param.php) pour ajouter des données utilisateur à votre requête. ** N'utilisez PAS ** l'interpolation ou la concaténation de chaîne pour y parvenir car vous avez créé un [bogue d'injection SQL] grave (http://bobby-tables.com/). ** NE JAMAIS ** mettre directement dans une requête les données utilisateur '$ _POST',' $ _GET' ou ** tout **, cela peut être très dangereux si quelqu'un cherche à exploiter votre erreur. – tadman
Note: L'interface orientée objet de 'mysqli' est significativement moins verbeuse, rendant le code plus facile à lire et à auditer, et n'est pas facilement confondue avec l'interface' mysql_query' obsolète. Avant de vous investir trop dans le style procédural, cela vaut la peine de changer. Exemple: '$ db = new mysqli (...)' et '$ db-> prepare (" ... ")' L'interface procédurale est un artefact de l'ère PHP 4 quand l'API 'mysqli' a été introduite et ne devrait pas être utilisée dans une nouvelle – tadman