将Foreach循环的每个结果插入MySQL

时间:2014-06-23 20:10:39

标签: php mysql foreach

感谢阅读。我尝试从亚马逊解析一系列网址,收集4个变量($ name,$ price,$ stars,$ reviews),并在Foreach循环的每次迭代中将每个变量的值存储到MySQL中

我遇到的问题是只有来自第一个网址的信息存储在MySQL中(正如您从数组中看到的那样,我有4个网站,我试图对此进行测试。< / p>

我知道获取变量的正确值的代码是正确的,因为这也适用于第一个网站,只是没有完成其余的工作,我无法弄清楚原因。

非常感谢任何帮助。谢谢!

function getSQL()
{
    include('simple_html_dom.php');

    $urlArray = array("http://www.amazon.com/kindle-fire-hdx-student-gaming-tablet/dp/B00BWYQ9YE/ref=sr_1_1?ie=UTF8&qid=1403276865&sr=8-1&keywords=kindle+fire+hdx", "http://www.amazon.com/Kindle-Fire-HDX-Display-Wi-Fi/dp/B00CUTT4HY/ref=sr_1_2?ie=UTF8&qid=1403276882&sr=8-2&keywords=kindle+fire+hdx", 
                "http://www.amazon.com/Kindle-Fire-HDX-Display-Wi-Fi/dp/B00BWYRF7E/ref=sr_1_3?ie=UTF8&qid=1403276882&sr=8-3&keywords=kindle+fire+hdx", "http://www.amazon.com/kindle-fire-hdx-best-movie-tablet-8.9/dp/B00BHJRYYS/ref=sr_1_5?ie=UTF8&qid=1403276882&sr=8-5&keywords=kindle+fire+hdx");

    foreach ($testArray as $url) 
    {

        $html = file_get_html("$url");
        $name = $html->find('h1[class="parseasinTitle"]', 0)->plaintext; //line 6455
        $price = $html->find('b[class=priceLarge]', 0)->plaintext; //line 6650

        $string = $html->plaintext;

        $wordToFind = 'stars';
        $numWordsToWrap = 4;

        $words = preg_split('/\s+/', $string);
        if (($pos = array_search($wordToFind, $words)) !== FALSE) {
        $start = ($pos - $numWordsToWrap > 0) ? $pos - $numWordsToWrap : 0;
        $length = (($pos + ($numWordsToWrap + 1) < count($words)) ? $pos + 1 : count($words) - 1) - $start;
        $slice = array_slice($words, $start, $length);
        $stars = implode(' ', $slice);
        } else echo 'I didn\'t find it'; 


        $wordToFind2 = 'reviews';
        $numWordsToWrap2 = 4;

        $words2 = preg_split('/\s+/', $string);
        if (($pos2 = array_search($wordToFind2, $words2)) !== FALSE) {
        $start2 = ($pos2 - $numWordsToWrap2 > 0) ? $pos2 + 1 : 0;
        $length2 = (($pos2 + ($numWordsToWrap2 + 1) < count($words2)) ? $pos2 + ($numWordsToWrap2 + 1) : count($words2) - 1) - $start2;
        $slice2 = array_slice($words2, $start2, $length2);
        $reviews = implode(' ', $slice2);
        $reviews = str_replace("&nbsp;", "", $reviews);
        } else echo 'I didn\'t find it';


        $amazon_all_sql = "

        insert into kindlefire
        values('$name', '$price', '$stars', '$reviews');
        ";

        return $amazon_all_sql; 
    }       
}

2 个答案:

答案 0 :(得分:1)

您需要替换以下行

return $amazon_all_sql; 

foreach循环执行第一轮然后遇到return语句。这将终止函数中的所有处理。删除它并将其替换为执行sql的语句。

如果您只想查看生成的所有SQL,请更改以下行,然后将返回值拉出foreach循环。 (注意。=运算符用于将所有SQL附加到$ amazon_all_sql变量)

   $amazon_all_sql .= "

    insert into kindlefire
    values('$name', '$price', '$stars', '$reviews');
    ";

}    

    return $amazon_all_sql; 

答案 1 :(得分:0)

修复您的返回和您的阵列名称。

 function getSQL()
    {
        include('simple_html_dom.php');

        $urlArray = array("http://rads.stackoverflow.com/amzn/click/B00BWYQ9YE", "http://rads.stackoverflow.com/amzn/click/B00CUTT4HY", 
                    "http://rads.stackoverflow.com/amzn/click/B00BWYRF7E", "http://rads.stackoverflow.com/amzn/click/B00BHJRYYS");

        foreach ($urlArray as $url) 
        {

            $html = file_get_html("$url");
            $name = $html->find('h1[class="parseasinTitle"]', 0)->plaintext; //line 6455
            $price = $html->find('b[class=priceLarge]', 0)->plaintext; //line 6650

            $string = $html->plaintext;

            $wordToFind = 'stars';
            $numWordsToWrap = 4;

            $words = preg_split('/\s+/', $string);
            if (($pos = array_search($wordToFind, $words)) !== FALSE) {
            $start = ($pos - $numWordsToWrap > 0) ? $pos - $numWordsToWrap : 0;
            $length = (($pos + ($numWordsToWrap + 1) < count($words)) ? $pos + 1 : count($words) - 1) - $start;
            $slice = array_slice($words, $start, $length);
            $stars = implode(' ', $slice);
            } else echo 'I didn\'t find it'; 


            $wordToFind2 = 'reviews';
            $numWordsToWrap2 = 4;

            $words2 = preg_split('/\s+/', $string);
            if (($pos2 = array_search($wordToFind2, $words2)) !== FALSE) {
            $start2 = ($pos2 - $numWordsToWrap2 > 0) ? $pos2 + 1 : 0;
            $length2 = (($pos2 + ($numWordsToWrap2 + 1) < count($words2)) ? $pos2 + ($numWordsToWrap2 + 1) : count($words2) - 1) - $start2;
            $slice2 = array_slice($words2, $start2, $length2);
            $reviews = implode(' ', $slice2);
            $reviews = str_replace("&nbsp;", "", $reviews);
            } else echo 'I didn\'t find it';


            $amazon_all_sql = "

            insert into kindlefire
            values('$name', '$price', '$stars', '$reviews');
            ";


        }  
    return $amazon_all_sql;     
    }