2010-11-29 6 views
3

Je commence à être flou pour mettre à jour les données avec plusieurs option_id @option_name en même temps.Comment mettre à jour les données vers MySQL

db actuel

option_id option_name  option_content   option_status 
1   web_url   http://localhost.com  1 
2   web_name   My Website    1 
3   web_description Welcome to my website 1 
4   web_keywords  movies, power, ranger 1 

données de mise à jour php

$web_name = $_POST['web_name']; 
$web_url  = $_POST['web_url']; 
$web_desc = $_POST['web_desc']; 
$web_keyword = $_POST['web_keyword']; 

Mise à jour De DR anwser

$query = "UPDATE web_options SET option_content= 
     '{$db->string_escape($web_name, true)}' 
     WHERE option_name = 'web_name'"; 
$db->rq($query); 

$query = "UPDATE web_options SET option_content= 
    '{$db->string_escape($web_url, true)}' 
     WHERE option_name = 'web_url'"; 
$db->rq($query); 

$query = "UPDATE web_options SET option_content= 
    '{$db->string_escape($web_desc, true)}' 
     WHERE option_name = 'web_desc'"; 
$db->rq($query); 

$query = "UPDATE web_options SET option_content= 
    '{$db->string_escape($web_keyword, true)}' 
     WHERE option_name = 'web_keyword'"; 
$db->rq($query); 

Il ont un moyen de faire cette mise à jour des requêtes plus simples?

+1

Quelle était la question à nouveau? –

+0

Pourriez-vous préciser ce que vous voulez mettre à jour avec quoi? – deceze

+0

ressemble à une mauvaise question sur ma question lol .. DR était de donner une idée. mais je veux en requête courte. – Blur

Répondre

3

Vous avez utiliser plusieurs requêtes:

$query = "UPDATE web_options SET option_content= 
      '{$db->string_escape($web_name, true)}' 
      WHERE option_name = 'web_name'"; 
$db->rq($query); 

$query = "UPDATE web_options SET option_content= 
     '{$db->string_escape($web_url, true)}' 
      WHERE option_name = 'web_url'"; 
$db->rq($query); 

// And so on... 

Une approche légèrement meilleure s pour utiliser un tableau associatif:

$data['web_name'] = $_POST['web_name']; 
$data['web_url'] = $_POST['web_url']; 
//and so on... 
//Resist the temptation to use $_POST directly! 

foreach ($data as $name => $value) { 
    $query = "UPDATE web_options SET option_content= 
      '{$db->string_escape($value, true)}' 
       WHERE option_name = '$name'"; 
    $db->rq($query); 
} 
+0

On dirait que j'ai besoin de le répéter 20 fois si vous avez 20 entrées. Une courte requête? – Blur

+0

Ce que vous avez est essentiellement une liste de paires nom-valeur. Vous pouvez les mettre dans un tableau et ensuite faire une boucle sur ce tableau pour mettre à jour la base de données. De cette façon, au moins la partie base de données de votre code est réduite. –

3

UPDATE Les requêtes prennent exactement les mêmes conditions WHERE que les requêtes normales.

UPDATE `web_options` SET ... WHERE `option_content` = 'My Website'; 

met à jour toutes les lignes où le champ option_content est égal à « Mon site Web ».

+2

Chaque ligne de cette réponse commence par le mot "mise à jour". Est-ce que je reçois un badge anti-poésie ou quelque chose? – deceze

+0

Si seulement! Je pense que nous devrions pétition Joël pour un :) –

+0

haha, oui vous devriez: P – tawfekov

0

Votre tableau ne semble pas contenir de colonnes nommées web_name, web_url, web_desc ou web_keyword. Je vous suggère de revoir votre didacticiel SQL de base. Beaucoup plus attentivement cette fois. En ce qui concerne la solution ... Ah, @deceze vient de le publier.

0

afin d'utiliser la mise à jour, vous devez savoir ce qui est option_id que vous souhaitez cibler

le option_id doit être la clé primaire

et votre code sera comme celui-ci

$web_name = $_POST['shop_name']; 
$web_url  = $_POST['shop_url']; 
$web_desc = $_POST['shop_desc']; 
$web_keyword = $_POST['shop_keyword']; 
$option_id = $_POST['option_id']; 

$query = 'UPDATE web_options SET 
     web_name="' . $db->string_escape($web_name, true) . '", 
     web_url="' . $db->string_escape($web_url, true) . '", 
     web_desc="' . $db->string_escape($web_desc, true) . '", 
     web_keyword="' . $db->string_escape($web_keyword, true) . '" 
     WHERE option_content ="' $bd->string_escape($option_id , true) . '" '; 
$db->rq($query); 
0

Est-ce que flou tue et donne des erreurs pour les instructions SQL incorrectes?

J'aime utiliser

or die("Cannot Update: ".mysql_error()); 

Il aide normalement repérer la question.

Questions connexes