экспорт товаров в xml с использованием sql запросов - PullRequest
0 голосов
/ 21 мая 2018

У меня есть SQL-запрос, который завершает вывод, который я сделаю, который работает отлично.

Теперь я хочу использовать SQL-запрос в сценарии php, чтобы выдавать вывод xml каждый раз, когда я запускаю php.

Это код, который у меня есть сейчас, но он заканчивается с ошибкой 500 (я думаю, что ошибка создается в строке 24 - 25)

<?php 

// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT
    psc5_product.id_product AS 'product_id',
    psc5_product.ean13 AS 'ean13',
    psc5_product.price AS 'price',
    psc5_product.reference AS 'product_reference',
    psc5_stock_available.quantity AS 'available_stock',
    psc5_manufacturer.name AS 'brand',
    psc5_product_lang.description AS 'description',
    psc5_product_lang.name AS 'title',
    concat("https://www.natureldeluxe.be/", psc5_category_lang.link_rewrite, "/", psc5_product_lang.link_rewrite) AS 'deeplink',
    concat("https://www.natureldeluxe.be/", psc5_image.id_image, "-large_default/", psc5_product_lang.link_rewrite, ".jpg") AS 'imagelink' 
FROM
    psc5_product 
    INNER JOIN
        psc5_stock_available 
        ON psc5_stock_available.id_product = psc5_product.id_product 
    INNER JOIN
        psc5_manufacturer 
        ON psc5_manufacturer.id_manufacturer = psc5_product.id_manufacturer 
    INNER JOIN
        psc5_product_lang 
        ON psc5_product_lang.id_product = psc5_product.id_product 
    INNER JOIN
        psc5_category_lang 
        ON psc5_category_lang.id_category = psc5_product.id_category_default 
    INNER JOIN
        psc5_image 
        ON psc5_image.id_product = psc5_product.id_product"

$result = $adb->query($sql);
 $xml .= "<products>";
while($row=$adb->fetch_array($result))
{
    $xml .= "<product_id>".$row['fname']."</product_id>"; 
    $xml .= "<ean13>".$row['lname']."</ean13>";
    $xml .= "<price>".$row['lname']."</price>";
    $xml .= "<product_reference>".$row['lname']."</product_reference>";
    $xml .= "<available_stock>".$row['lname']."</available_stock>";
    $xml .= "<brand>".$row['lname']."</brand>";
        $xml .= "<description>".$row['lname']."</description>";
            $xml .= "<title>".$row['lname']."</title>";
            xml .= "<deeplink>".$row['lname']."</deeplink>";
            xml .= "<imagelink>".$row['lname']."</imagelink>";
            }
$xml .= "</products>";

$sxe = new SimpleXMLElement($xml);
$sxe->asXML("test.xml");
?>

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

try oop xml SimpleXMLElement. Класс SimpleXMLElement

Использование SimpleXMLElement -> addAttribute () и SimpleXMLElement -> addChild () .

Точно так же, как:

<?PHP
$sxe = simplexml_load_string(/*....xml string....*/);
$sxe -> addChild("product_id", $row['fname']);
0 голосов
/ 21 мая 2018

Проблема в том, что у вас есть не экранированные двойные кавычки внутри вашей строки $sql.Также вам не хватает ; в конце задания.Попробуйте вместо этого:

$sql = "SELECT
    psc5_product.id_product AS 'product_id',
    psc5_product.ean13 AS 'ean13',
    psc5_product.price AS 'price',
    psc5_product.reference AS 'product_reference',
    psc5_stock_available.quantity AS 'available_stock',
    psc5_manufacturer.name AS 'brand',
    psc5_product_lang.description AS 'description',
    psc5_product_lang.name AS 'title',
    concat(\"https://www.natureldeluxe.be/\", psc5_category_lang.link_rewrite, \"/\", psc5_product_lang.link_rewrite) AS 'deeplink',
    concat(\"https://www.natureldeluxe.be/\", psc5_image.id_image, \"-large_default/\", psc5_product_lang.link_rewrite, \".jpg\") AS 'imagelink' 
FROM
    psc5_product 
    INNER JOIN
        psc5_stock_available 
        ON psc5_stock_available.id_product = psc5_product.id_product 
    INNER JOIN
        psc5_manufacturer 
        ON psc5_manufacturer.id_manufacturer = psc5_product.id_manufacturer 
    INNER JOIN
        psc5_product_lang 
        ON psc5_product_lang.id_product = psc5_product.id_product 
    INNER JOIN
        psc5_category_lang 
        ON psc5_category_lang.id_category = psc5_product.id_category_default 
    INNER JOIN
        psc5_image 
        ON psc5_image.id_product = psc5_product.id_product";

Вам также необходимо переписать код обработки.В начале кода у вас есть $conn в качестве имени вашего соединения, но вы используете $adb ниже.Также строки, которые выводят xml, используют одну и ту же переменную .$row['lname'], когда они должны использовать переменную с соответствующим именем из запроса.Попробуйте изменить этот код на это:

$result = $conn->query($sql);
$xml .= "<products>";
while ($row = $result->fetch_array())
{
    $xml .= "<product_id>".$row['product_id']."</product_id>"; 
    $xml .= "<ean13>".$row['ean13']."</ean13>";
    $xml .= "<price>".$row['price']."</price>";
    $xml .= "<product_reference>".$row['product_reference']."</product_reference>";
    $xml .= "<available_stock>".$row['available_stock']."</available_stock>";
    $xml .= "<brand>".$row['brand']."</brand>";
    $xml .= "<description>".$row['description']."</description>";
    $xml .= "<title>".$row['title']."</title>";
    $xml .= "<deeplink>".$row['deeplink']."</deeplink>";
    $xml .= "<imagelink>".$row['imagelink']."</imagelink>";
}
$xml .= "</products>";
...