следующее не проверено, но я думаю, что он должен дать представление. Создайте prepared statement
и привяжите переменную к оператору, затем выполните цикл, как только вы объявили переменную.
$xml=simplexml_load_file("URL") or die("Error: Cannot create object");
$sql = 'INSERT INTO BBB (price) VALUES (?)';
$stmt = $dbconnection->prepare($sql);
$stmt->bind_param('s', $price);
foreach ($tags as $key=>$val) {
if ($key == "product") {
$dcprice = $key->product_info->price;
$productranges = $val;
for($i=0; $i < count($productranges); $i+=2) {
$offset = $productranges[$i] + 1;
$len = $productranges[$i + 1] - $offset;
$price = $dcprice(array_slice($values, $offset, $len));
$stmt->execute();
}
}
}
echo "New records created successfully";
Основной пример вставки нескольких записей.
$dbhost = 'localhost';
$dbuser = 'root';
$dbpwd = 'xxx';
$dbname = 'experiments';
$db = new mysqli($dbhost, $dbuser, $dbpwd, $dbname);
$sql='insert into `temp` (`val`) values (?)';
$stmt=$db->prepare($sql);
if($stmt){
$stmt->bind_param('s', $i);
for($i=0; $i < 100; $i++)$stmt->execute();
$stmt->free_result();
$stmt->close();
}
Используя фактические данные из файла XML (но не с помощью simpleXML
)
$url='https://daisycon.io/datafeed/?filter_id=17940&settings_id=2510&demo';
$dom=new DOMDocument;
$dom->load($url);
$xp=new DOMXPath($dom);
$col=$dom->getElementsByTagName('product_info');
if(!empty($col)){
$dbhost = 'localhost';
$dbuser = 'root';
$dbpwd = 'xxx';
$dbname = 'experiments';
$db = new mysqli($dbhost, $dbuser, $dbpwd, $dbname);
$sql='insert into `temp` (`brand`,`title`,`price`) values (?,?,?);';
$stmt=$db->prepare($sql);
if($stmt){
$stmt->bind_param('sss', $brand, $title, $price);
foreach($col as $i => $product){
$brand = $xp->query('brand', $product)->item(0)->nodeValue;
$price = floatval($xp->query('price', $product)->item(0)->nodeValue);
$title = $xp->query('title', $product)->item(0)->nodeValue;
$stmt->execute();
}
$stmt->free_result();
$stmt->close();
}
$db=null;
}
Это проходит через XML и вставляет записи, как и следовало ожидать, - я надеюсь, что это помогает ,
Пример чтения XML и отображения результатов - нет базы данных, чтобы показать, как читать записи!
$url='https://daisycon.io/datafeed/?filter_id=17940&settings_id=2510&demo';
$dom=new DOMDocument;
$dom->load($url);
$xp=new DOMXPath($dom);
$col=$dom->getElementsByTagName('product_info');
if(!empty($col)){
foreach($col as $i => $product){
$data=array(
'brand' => $xp->query('brand', $product)->item(0)->nodeValue,
'title' => $xp->query('title', $product)->item(0)->nodeValue,
'price' => floatval($xp->query('price', $product)->item(0)->nodeValue)
);
echo '<ul><li>',implode('</li><li>',$data),'</li></ul>';
}
}
Это затем выводит:
<ul>
<li>Dr. Fix</li>
<li>Dr. Fix Organic Droge Voeten Balsem 75 ml</li>
<li>11.95</li>
</ul>
<ul>
<li>Lamberts</li>
<li>Lamberts Selenium ACE 100 TAB</li>
<li>19.1</li>
</ul>
<ul>
<li>Annemarie Borlind</li>
<li>Annemarie Borlind Lipcontourstift Red 1.05 G</li>
<li>13.25</li>
</ul>
<ul>
<li>Wapiti</li>
<li>Wapiti Darmfunctie 20 dragees</li>
<li>3.95</li>
</ul>
<ul>
<li>Davitamon</li>
<li>Davitamon Compleet Mama 60 capsules</li>
<li>11.95</li>
</ul>
<ul>
<li>Vitaminhealth</li>
<li>Vitaminhealth Multi Vitaminen 30 tabletten</li>
<li>9.95</li>
</ul>
<ul>
<li>Vitaminhealth</li>
<li>Vitaminhealth Multi Vitaminen 120 tabletten</li>
<li>32.5</li>
</ul>
<ul>
<li>Vitaminhealth</li>
<li>Vitaminhealth Multi Vitaminen 240 tabletten</li>
<li>58.95</li>
</ul>
<ul>
<li>Vitaminhealth</li>
<li>Vitaminhealth Botformule 60 tabletten</li>
<li>12.95</li>
</ul>
<ul>
<li>Vitaminhealth</li>
<li>Vitaminhealth Betacaroteen 60 softgels</li>
<li>16.95</li>
</ul>
<ul>
<li>Brita</li>
<li>Brita Optimax Cool Wit Waterfilterkan 1 exemplaar</li>
<li>49.95</li>
</ul>
<ul>
<li>Essential Organics</li>
<li>Essential Organics Cal Mag & Zink 90 tabletten</li>
<li>11.5</li>
</ul>
<ul>
<li>Vitotaal</li>
<li>Vitotaal Canadese Geelwortel 45 vegicaps</li>
<li>9.95</li>
</ul>
<ul>
<li>Annemarie Borlind</li>
<li>Annemarie Borlind Combination Skin Dagfluid 75 ml</li>
<li>27.95</li>
</ul>
<ul>
<li>Vitotaal</li>
<li>Vitotaal Cranberry + C 45 vegicaps</li>
<li>9.95</li>
</ul>
<ul>
<li>Vital Cell Life</li>
<li>Vital Cell Life Vitamine B6/B12 foliumzuur 60 cap</li>
<li>12</li>
</ul>
<ul>
<li>Brita</li>
<li>Brita Marella XL Wit Waterfilterkan (3,5 liter) 1 exemplaar</li>
<li>21.5</li>
</ul>
<ul>
<li>Plantina</li>
<li>Plantina Astaxanthin-eco 60 capsules</li>
<li>33.1</li>
</ul>
<ul>
<li>Terrasana</li>
<li>Terrasana Umeboshi 150 G</li>
<li>7.49</li>
</ul>
<ul>
<li>Solgar Vitamins</li>
<li>Solgar Vitamins Digestive Enzymes 250 tabletten</li>
<li>39.9</li>
</ul>
Его нормально, что он говорит вам, что новые записи создаются. В конце вашего кода вы просто повторяете эту фразу без какого-либо предложения if, которое проверяет, действительно ли они были вставлены. – Twinfriends
if $ key! = 'Product', тогда он связывает неопределенный параметр ($ price) и выполняет в любом случае – Cashbee
oh, а массив $ price становится все больше на каждой итерации. вы должны сбросить $ price за каждый тег – Cashbee