PHP foreach 没有插入

标签 php mysql xml foreach insert

我已经被困在这个问题上有一段时间了,我对此主题所做的所有搜索都没有给我带来解决方案。此代码将 XML 第一个产品的值插入到 MySQL 表中。

$xml=simplexml_load_file("URL") or die("Error: Cannot create object");

foreach ($xml->programs->products->product as $product);
foreach ($xml->programs->products->product->product_info->price as $price);

$insert = 'INSERT INTO BBB (price) VALUES (?)';
$insertStmt = $dbconnection->prepare($insert);
foreach ($product as $row) {
    $insertStmt->bind_param('s', $price);
}

$insertStmt->execute();

echo "New records created successfully";

此后我得到的反馈是 foreach 对于准备好的 PHP 语句不能以这种方式工作。此后我创建了这段代码:

$xml=simplexml_load_file("URL") or die("Error: Cannot create object");

$insert = 'INSERT INTO BBB (price) VALUES (?)';
$insertStmt = $dbconnection->prepare($insert);
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));
        }
    } 
    $insertStmt->bind_param('s', $price);
    $insertStmt->execute();
}
echo "New records created successfully";

代码回显新记录已创建,但是当我检查 phpMyAdmin 中的表时,什么也没有出现。

我检查过的链接示例是:How does PHP 'foreach' actually work? , foreach , xml_parse_into_struct 。但我找不到正确的信息,如果有人能指出我做错了什么,那就太好了。

最佳答案

以下内容未经测试,但我认为它应该给出一个想法。创建准备好的语句并将变量绑定(bind)到该语句,然后在声明该变量后在循环中执行。

$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 &amp; 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>

关于PHP foreach 没有插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41739875/

相关文章:

PHP::完全限定方法文字到字符串

php - UTF-8贯穿始终

php - 用于电子邮件验证的签名路由未通过签名验证

php - 为什么我的页面上有 �

mysql - 使用聚合函数从查询中选择非组字段

javascript - jquery XML 解析最后 3 个文档

php - 在 Laravel 中选择多列表单数据库

php - 无法从上一页检索数据(PHP 和 MYSQL)

java - 使用java处理空的xml标签

xml - 如何使用 Perl 使用 TWIG 提取 CDATA 内容