create temporary table et update

Eléphant du PHP | 258 Messages

20 janv. 2010, 13:56

Bonjour

J'ai un problème avec la requête sql. je voulais mettre à jour le champ manquant "login" de la même table à partir d'un champ "pass".
Je vous remercie beaucoup de vos réponses.
exemple:

DROP TABLE IF EXISTS `tmp`;
CREATE TABLE IF NOT EXISTS `tmp` (
  `login` varchar(50) DEFAULT NULL,
  `pass` varchar(50) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

UPDATE tmp SET login=(
SELECT * FROM login
WHERE pass="1234"
)

Le message affiche :
#1241 - Operand should contain 1 column(s)
Résultat
| login | pass|
| cyphos | 1234|
| dentre | htr|
| (vide)| 1234|
Info:
J'utilise EasyPhp 5.3.
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

Eléphant du PHP | 258 Messages

21 janv. 2010, 11:11

coucou?

Il y a une solution?
Merci
Cordialement
---------------------------------------------------------
Cyphos utilise
- Firefox et Google Chrome dernière version
- Windows Seven ou Windows XP SP3,
- Wampserver

Eléphanteau du PHP | 15 Messages

29 janv. 2010, 11:00

C'est très simple,
La partie
UPDATE tmp SET login=(
SELECT * FROM login
WHERE pass="1234"
est une hérésie.

Essaye plutot
UPDATE tmp SET login=(
SELECT login FROM login
WHERE pass="1234"
mais bon, c'est foireux comme système, suffit qu'il y ai deux utilisateurs ayant le même mot de passe pour faire planter ta requête.

En effet, quand tu fais une affectation avec une sous requête tu dois renvoyer qu'un seul résultat et une seule colonne.