экспорт товаров в xml с использованием sql запросов

У меня есть 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");
?>

0

Решение

попробуйте oop xml SimpleXMLElement.
Класс SimpleXMLElement

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

Как:

<?PHP
$sxe = simplexml_load_string(/*....xml string....*/);
$sxe -> addChild("product_id", $row['fname']);
0

Другие решения

Проблема в том, что у вас есть двойные кавычки $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>";
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector