[RESOLU] UPDATE $variable SET...

Eléphant du PHP | 61 Messages

06 janv. 2015, 12:24

Bonjour et bonne année 2015 à tous...

Voila le probléme jour...

Je souhaite modifier une ligne dans une table en PDO....(super simple)...
$req=$bdd->prepare('UPDATE brive SET temp_mini=:tempMini, temp_maxi=:tempMaxi, comment=:com WHERE period=:period');
	
	$req->execute(array(
	'tempMini'=>$tempMini,
	'tempMaxi'=>$tempMaxi,
	'com'=>$weatherCom,
	'period'=>$period
	));
Ce code marche la ligne est bien modifier dans la table brive...

Mais si je veux remplacer brive par une variable $city....ça ne marche pas...
$req=$bdd->prepare('UPDATE :city SET temp_mini=:tempMini, temp_maxi=:tempMaxi, comment=:com WHERE period=:period');
	
	$req->execute(array(
	'city'=>$city,
	'tempMini'=>$tempMini,
	'tempMaxi'=>$tempMaxi,
	'com'=>$weatherCom,
	'period'=>$period
	));
Si quelqu'un à une réponse à mon probléme...d'avance merci...

Cordialement

ViPHP
ViPHP | 928 Messages

06 janv. 2015, 12:40

Tu ne peux pas bind les noms de table : http://stackoverflow.com/questions/1518 ... table-name

Il faut donc faire la vérification à la main :
$allowedCities = array('brive', 'paris', 'etc..');
if (!in_array($city, $allowedCities))
   throw new Exception('City '.$city.' not allowed');

$req=$bdd->prepare('UPDATE '.$city.' SET temp_mini=:tempMini, temp_maxi=:tempMaxi, comment=:com WHERE period=:period');
       
        $req->execute(array(
        'tempMini'=>$tempMini,
        'tempMaxi'=>$tempMaxi,
        'com'=>$weatherCom,
        'period'=>$period
        ));
Je ne connais pas la modélisation de ta base de donnée, mais là comme ça je trouve qu'avoir une table par ville me paraît un peu étrange. Tu ne peux pas ajouter ta ville en tant que colonne d'une table commune plutôt ?

Eléphant du PHP | 61 Messages

06 janv. 2015, 13:36

Le projet est d'afficher la météo par ville...on peut ajouter une ville (via CREATE TABLE) ensuite dans mes tables je mets à jour mes différentes infos...

Je vais réfléchir à ta question mais je pense que c'est faisable...

ViPHP
ViPHP | 928 Messages

06 janv. 2015, 15:17

Honnêtement il te faut une seule table pour toutes tes villes, puisque les colonnes sont similaires. Non seulement ça te simplifiera beaucoup la vie, mais c'est aussi l'architecture qui est recommandée. Les seuls cas qui pourraient justifier de séparer tes tables :
- Si tes villes ont des colonnes vraiment différentes (ce qui n'est pas ton cas)
- Des cas très précis d'optimisation sur des bigdata (ce qui n'est pas non plus ton cas à priori)

N'aies pas peur d'avoir des centaines de milliers de lignes dans une seule table, MySQL est prévu pour ça ;) Penses juste à ajouter un index sur la colonne qui contiendra ta ville.

++

Eléphant du PHP | 61 Messages

06 janv. 2015, 16:01

Merci pour votre conseil...effectivement j'avais peur d'avoir de nombreuses lignes dans ma table mais si cela peut me simplifier la vie alors ok...

Cordialement