Как записать данные из html в MySQL?

Рейтинг: 1Ответов: 1Опубликовано: 19.01.2015

Есть структура html такого вида

<p>3.5 "Движение мотоциклов запрещено".</p>
<p>3.6 "Движение тракторов запрещено". Запрещается движение тракторов и самоходных машин.</p>
<p>3.7 "Движение пешеходов запрещено".</p>

То есть правила дорожного движения. Можно это как то автоматически вбить в базу данных MySQL,и задать каждому id начиная с 1 и до ...?

Ответы

▲ 4Принят
$content = '<p>3.5 "Движение мотоциклов запрещено".</p> <p>3.6 "Движение тракторов запрещено". Запрещается движение тракторов и самоходных машин.</p> <p>3.7 "Движение пешеходов запрещено".</p>';
preg_match_all('/"(?P<rules>[\w\s-]+)"/u', $content, $matches);

var_dump($matches['rules']);

или sandbox

В правилах могут использоваться буквенно-цифровые символы, а также _ и -.

Если в правилах используются иные символы, то я поправлю regexp-паттерн.


UPDATE:

Запросы будут выглядеть как-то так:

Создаём таблицу:

CREATE TABLE `rules`(  
  `id` INT NOT NULL AUTO_INCREMENT,
  `name` TEXT,
  PRIMARY KEY (`id`)
) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;

Добавляем все записи одним запросом:

INSERT INTO `rules` (`name`) VALUES('Движение тракторов запрещено'),('Движение тракторов запрещено'),...;

Теперь, как правильно (почитайте "Почему стоит пользоваться PDO"):

$dbname = 'pdd';
$username = 'user';
$password = 'pass';
$table = 'rules';

try {
    //** Соединение с СУБД **//

    $pdo = new \PDO("mysql:host=localhost;dbname={$dbname};charset=utf8;", $username, $password);
    $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

    //** Создание таблицы **//

    $sql = "CREATE TABLE `{$table}`(  
      `id` INT NOT NULL AUTO_INCREMENT,
      `name` TEXT,
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB CHARSET=utf8 COLLATE=utf8_general_ci;";

    $pdo->exec($sql);

    //** Добавление записей в таблицу **//

    // Этот способ не универсальный, ибо подразумевает добавление значений только к одному полю "name". Если требуется для нескольких полей, то [stackoverflow](https://stackoverflow.com/a/2098689), либо посмотрите в сторону ORM/DBAL.

    $values = array_fill(0, count($matches['rules']), '(?)');
    $values = implode(',', $values);

    $sql = "INSERT INTO `{$table}` (`name`) VALUES {$values}";
    $stmt = $pdo->prepare($sql);
    $stmt->execute($matches['rules']);

} catch(\PDOException $e) {
  echo $e->getMessage(); // display error
}