2010-09-01 3 views
3

У меня есть этот MySQL запрос:PHP MySQL, переменная помощь запрос помощь

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

Как я включить это:

  • вместо wp_12_ я хочу переменная $prefix (переменная содержит wp_4_, wp_3_, и т.д.)
  • вместо yyy я хочу значение $perf (переменное имя)
  • вместо 5 Я хочу значение $meta_id (переменная является nr)

Thank u!

P.S.

вот что я использую, и она работает:

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

Проблема заключается в том, когда я выполнить этот запрос, severl после мета-поля обновляются, а не только один. Ty

ответ

1

Вот как я пишу это с PDO:

$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

Вы не должны бежать префикс $? – Codeacula

+0

@Codeacula: префикс $ - это строка, которую я жестко закодировал в приведенном выше примере. Это происходит не из ненадежного источника. Кроме того, какую функцию вы бы предложили использовать, чтобы избежать возврата? Конечно, mysql_real_escape_string() этого не делает. –

+0

У вас это жестко запрограммировано, да, но я готов поспорить, что OP будет использовать код как есть, и что префикс $, скорее всего, в конечном итоге изменится, кто знает, какой источник. И, возможно, это паранойя, которая заставляет меня хотеть дезинформировать каждую переменную, которая поступает от пользователя. Кажется, каждому свое. – Codeacula

2

Использование:

$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

Вы также забыли wp_12_ в ГДЕ. – Codeacula

+0

@Codeacula: Thx, исправлено –

+1

+1, потому что я всегда люблю sprintf над обычной конкатенацией запросов. Особенно управляем, когда вы пишете головную боль запроса. – Codeacula