2010-09-01 5 views
3

J'ai cette requête mysql:Php mysql, l'aide de requêtes d'aide variables

UPDATE `table`.`wp_12_postmeta` 
    SET `meta_value` = 'yyy' 
WHERE `wp_12_postmeta`.`meta_id` =5 
LIMIT 1 ; 

Comment puis-je intégrer ceci:

  • au lieu de wp_12_ je veux une $prefix variable (variable contient wp_4_, wp_3_, etc)
  • au lieu de yyy je veux une valeur $perf (variable est un nom)
  • au lieu de 5 je veux une valeur $meta_id (variable est un nr)

Merci!

P.S.

ici est ce que je l'utilise et il fonctionne:

$wpdb->query("UPDATE ".$prefix."postmeta SET meta_value = '".$perf."' WHERE meta_id = '".$meta_id."' LIMIT 1 "); 

Le problème est, quand j'exécute cette requête, les champs après severl meta sont mis à jour, au lieu d'un seul. Ty

Répondre

1

Voilà comment j'écrire cela avec AOP:

$prefix = "wp_4_"; 
$sql = "UPDATE `table`.`{$prefix}postmeta` SET `meta_value` = ? 
    WHERE `{$prefix}postmeta`.`meta_id` = ? LIMIT 1"; 

$stmt = $pdo->prepare($sql); 
$stmt->execute(array($perf, $meta_id)); 
+0

Si vous échapper pas le préfixe $? – Codeacula

+0

@Codeacula: Le préfixe $ est une chaîne que j'ai codée en dur dans l'exemple ci-dessus. Cela ne vient pas d'une source non fiable. D'ailleurs, quelle fonction suggéreriez-vous que j'utiliserais pour échapper à un back-tick? Certes, mysql_real_escape_string() ne le fait pas. –

+0

Vous l'avez codé en dur, oui, mais je serais prêt à parier que le PO utiliserait le code tel quel, et ce préfixe $ finirait probablement par être changé par qui sait quelle source. Et c'est peut-être la paranoïa qui me pousse à désinfecter chaque variable provenant de l'entrée de l'utilisateur. Pour chacun leur, je suppose. – Codeacula

2

Utilisation:

$query = sprintf("UPDATE `table`.`%s` 
        SET `meta_value` = '%s' 
        WHERE `%s`.`meta_id` = %d 
        LIMIT 1 ", 
       mysql_real_escape_string($prefix), 
       mysql_real_escape_string($perf), 
       mysql_real_escape_string($prefix), 
       mysql_real_escape_string($meta_id)); 
+0

Vous avez oublié le wp_12_ dans le WHERE, aussi. – Codeacula

+0

@Codeacula: Thx, corrigé –

+1

+1 parce que j'aime toujours sprintf sur la concaténation habituelle pour les requêtes. Particulièrement gérable lorsque vous écrivez un mal de tête d'une requête. – Codeacula