Парсинг в базу Msql, как записать данные в MySQL через макрос php_script

Тема в разделе "Инъекции в MySQL", создана пользователем Andrey2884, 18 июн 2020.

  1. Andrey2884

    Andrey2884 New Member Пользователи

    Регистрация:
    11 июл 2019
    Сообщения:
    58
    Город:
    Odessa
    Доброго времени суток. Вопрос по поводу парса в базу msql. Есть несколько таблиц
    product;
    products_description ;
    product_images
    Во всех таблицах прописан ID товара, но обновление идет по url поставщика <CD_DOCURL!> который прописан только в таблице "products_description" ; Как обновлять данные в остальных таблицах если в них нет этого столбца?
     
  2. inotoxic

    inotoxic Well-Known Member Пользователи

    Регистрация:
    13 сен 2015
    Сообщения:
    873
    В ней есть столбец - ID ?
     
  3. Andrey2884

    Andrey2884 New Member Пользователи

    Регистрация:
    11 июл 2019
    Сообщения:
    58
    Город:
    Odessa
  4. inotoxic

    inotoxic Well-Known Member Пользователи

    Регистрация:
    13 сен 2015
    Сообщения:
    873
    ну так по ID и обновлять
     
  5. Andrey2884

    Andrey2884 New Member Пользователи

    Регистрация:
    11 июл 2019
    Сообщения:
    58
    Город:
    Odessa
    Вы наверное меня не поняли. В моей базе есть несколько таблиц
    таблица 1 столбцы( id_товара , цена, кол-во, сортировка и.т.д
    таблица 2 столбцы( id_товара, url поставщика, описание короткое, описание полное, и.т.д
    таблица 3 столбцы(id_товара, фото1, фото2, фото3, и.т.д)
    При парсе у меня есть <CD_DOCURL!> по которому я сверяюсь т.е в таблице 2 я могу обновить значения, но как обновить в остальных?
     
  6. inotoxic

    inotoxic Well-Known Member Пользователи

    Регистрация:
    13 сен 2015
    Сообщения:
    873
    Почитайте про связь MySQL таблиц - один ко многим
    у вас во всех таблицах есть - ID

    Примерная логика
    взяли из таблицы 2 - url ему соответствует ID - 025
    спарсили данные
    в таблице 2 по ID - 025 - обновили (поставщика, описание и тп)
    в таблице 1 - по этому же ID -025 обновили (цену, кол-во итп)
    в третей таблице - обновили фото

    Когда берете url из таблица - берите в переменную и ID далее использую ID - обновляйте (или создавайте новые строки) данные
     
  7. Andrey2884

    Andrey2884 New Member Пользователи

    Регистрация:
    11 июл 2019
    Сообщения:
    58
    Город:
    Odessa
    Подскажите тогда , пожалуйста , каким оператором извлечь из таблицы2 ID соответствующее url ? SELECT? или я не в том направлении копаю?
     
  8. inotoxic

    inotoxic Well-Known Member Пользователи

    Регистрация:
    13 сен 2015
    Сообщения:
    873
    да выборка из БД делается через SELECT c условиями
    SELECT url, id FROM table_name WHERE условие выборки
    а как вы определяете что товар по такому-то url уже обработан, в бд есть какие-то пометки ?
     
  9. nct

    nct Member Пользователи

    Регистрация:
    25 дек 2016
    Сообщения:
    40
    Адрес:
    Беларусь
    Может вы знаете как подключить PHP - скрипт к БД версии PHP 7 и выше.
    Этот способ Ссылки недоступны для гостей к сожалению уже не подходит...

    <?php
    $db = mysql_connect("localhost", "user5", "password5"); #подключение к MySQL с передачей имени пользователя (user5) и пароля (password5)
    mysql_select_db("semh2_ocart1"); #выбираем базу semh2_ocart1
    mysql_query("SET NAMES utf8");
    $_POST[id] = mysql_real_escape_string($_POST[id]); #экранируем специальные символы в полученных от Content Downloader POST-данных id
    $_POST[model] = mysql_real_escape_string($_POST[model]); #экранируем специальные символы в полученных от Content Downloader POST-данных model
    mysql_query("INSERT INTO oc_product (product_id, model) VALUES ('$_POST[id]', '$_POST[model]')"); #добавляем запись в таблицу oc_product с полями product_id и model (где $_POST[id] - значение поля product_id, $_POST[model] - значение поля model)
    ?>

    ... но может это и не за этого (хотя раньше все подключалось), что странно, указываю адрес файла PHP который находится в корне сайта (например mydomen.com/os.php), пишет страница не найдена ... хотя должно открываться содержимое... как для файла php.ini. Он тоже не открывается. Может OpenCart как-то настроен.
     
  10. Andrey2884

    Andrey2884 New Member Пользователи

    Регистрация:
    11 июл 2019
    Сообщения:
    58
    Город:
    Odessa
    Я решаю через запросы mysqli, через обычные ничего не работает
    Например
    <?php

    $conn = mysqli_connect(localhost, xxxxx, xxxxxxxx, xxxxxxx);
    // Check connection
    if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
    }
    echo "";

    ?>
    Попробуйте, может у Вас то же получится
     
    nct нравится это.
  11. kagorec

    kagorec Администратор Команда форума Администратор

    Регистрация:
    3 янв 2011
    Сообщения:
    4.436
    Адрес:
    Latvia
    @nct, в интернете есть решение готовое с примером. Достаточно не лениться и проверить.

    Examples (MySQLi - Object Oriented)
    Код:
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDB";
    
    // Create connection
    $conn = new mysqli($servername, $username, $password, $dbname);
    // Check connection
    if ($conn->connect_error) {
      die("Connection failed: " . $conn->connect_error);
    }
    
    $sql = "INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('John', 'Doe', 'john@example.com')";
    
    if ($conn->query($sql) === TRUE) {
      echo "New record created successfully";
    } else {
      echo "Error: " . $sql . "<br>" . $conn->error;
    }
    
    $conn->close();
    ?>
    
    Example (MySQLi Procedural)
    Код:
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDB";
    
    // Create connection
    $conn = mysqli_connect($servername, $username, $password, $dbname);
    // Check connection
    if (!$conn) {
      die("Connection failed: " . mysqli_connect_error());
    }
    
    $sql = "INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('John', 'Doe', 'john@example.com')";
    
    if (mysqli_query($conn, $sql)) {
      echo "New record created successfully";
    } else {
      echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    
    mysqli_close($conn);
    ?>
    
    Example (PDO)
    Код:
    <?php
    $servername = "localhost";
    $username = "username";
    $password = "password";
    $dbname = "myDBPDO";
    
    try {
      $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
      // set the PDO error mode to exception
      $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
      $sql = "INSERT INTO MyGuests (firstname, lastname, email)
      VALUES ('John', 'Doe', 'john@example.com')";
      // use exec() because no results are returned
      $conn->exec($sql);
      echo "New record created successfully";
    } catch(PDOException $e) {
      echo $sql . "<br>" . $e->getMessage();
    }
    
    $conn = null;
    ?>
    Источник: Ссылки недоступны для гостей
     
    dimochkaorg и nct нравится это.
  12. nct

    nct Member Пользователи

    Регистрация:
    25 дек 2016
    Сообщения:
    40
    Адрес:
    Беларусь
    Я то искал, но понимание что искать сложно дается) ... годы уже не те. Спасибо!!!
     
  13. dimochkaorg

    dimochkaorg Active Member Пользователи

    Регистрация:
    25 мар 2017
    Сообщения:
    204
    Огромное спасибо за такой прекрасный хинт! Вот если бы вы еще показали бы как

    Код:
    $sql = "INSERT INTO MyGuests (firstname, lastname, email)
    VALUES ('John', 'Doe', 'john@example.com')";
    
    вместо этого VALUES (файл)"; указать путь к файлу, где лежит множество значений, чтобы не переписывать каждый раз файл импорта, а чтобы он чисто обрабатывал файл данных в которых содержится множество строк импорта типа 'John', 'Doe', 'john@example.com')"; Подскажите плиз, вон столько читал про инъекции в mysql ничего не понял, пока ваш пост не нашел. У вас талант. А я сложу в честь вас - Рождественский гимн! ))))
     

Поделиться этой страницей