Как правильно сформулировать SQL-запрос?

Доброй ночи!
Вопрос такой: Как изменить значение в поле таблицы?
Есть таблица wp_posts, там хранятся купоны, у купонов есть post_title, нужно сделать UPDATE всем купонам у которых ID в промежутке от 23504 - 28503.
DECLARE @i INT
DECLARE @c VARCHAR
WHILE @i <= 5000

@c=''
IF(@i < 10)
@c = '000'.@i;
END
IF(@i < 100)
@c = '00'.@i;
END
IF(@i < 1000)
@c = '0'.@i;
END
IF(@i <= 5000)
@c =@i;
END
@i++
END WHILE
UPDATE em_posts WHERE ID>=23504 AND ID<=28503
SET post_title = @i, post_name = @i

Ответ MySQL
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DECLARE @i INT
DECLARE @c VARCHAR
WHILE @i <= 5000
@c=''
IF(@i < 10)
@c = '000'.' at line 1

Я так понимаю вся конструкция неправильна?
Также попробовал сделать php-скрипт:
<?php
init_pdo();

function init_pdo ()
{
  try {
    $dsn = "mysql:dbname=dbname;host=ip";
    $pdo = new PDO($dsn, 'dbuser', 'dbpass', array(
      PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    ));
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    for($i=0; $i <= 5000; $i++){

      $coupon = '';
      if($i < 10) {
        $coupon = '000'.$i;
      } else if($i < 100) {
        $coupon = '00'.$i;
      } else if($i < 1000) {
        $coupon = '0'.$i;
      } else if($i <= 5000) {
        $coupon = $i;
      }

      $sql = "UPDATE em_posts WHERE ID BETWEEN 23504 AND 28503
      SET post_title = i, post_name = i";
      $q = $pdo->prepare($sql);
      $q->execute();
    }

  }
  catch(PDOException $e)
  {
    var_dump($e);
    die;
  }
  return $pdo;
}
?>

Запускаю через ssh php script.php - ответа вообще никакого нет, ни ошибок, ничего...
Спасибо за уделенное время!)
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
OrlovEvgenii
@OrlovEvgenii
golang developer / DevOps
DECLARE @i INT
DECLARE @c VARCHAR
WHILE @i <= 5000

@c=''
IF(@i < 10)
@c = '000'.@i;
END
IF(@i < 100)
@c = '00'.@i;
END
IF(@i < 1000)
@c = '0'.@i;
END
IF(@i <= 5000)
@c =@i;
END
@i++
END WHILE
UPDATE em_posts WHERE id BETWEEN 23504 AND 28503
SET post_title = @i, post_name = @i
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы