使用php curl将删除的数据插入MySQL

时间:2012-06-21 16:59:42

标签: php mysql curl insert screen-scraping

我在过去几天一直在研究这个脚本,似乎无法找到将数据插入MySQL的方法。我是PHP / MYSQL的初学者,之前只编写了几个简单的脚本。我能够回显出已删除的数据并且没有得到错误消息,但是当我检查phpmyadmin时查询不起作用(结果没有输入到数据库中)。

以下是我一直在处理的代码

require ("mysqli_connect.php"); 
include('../simple_html_dom.php');

ini_set('user_agent', 
  'Mozilla/5.0 (Windows; U; Windows NT 6.0; en-GB; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');

// get DOM from URL or file
$html = file_get_html('http://www.asos.com/Women/Jeans/Cat/pgecategory.aspx?cid=3630&via=lhn');
// find all images

foreach($html->find('#items') as $a)       
    echo $a->innertext .'<br>';

foreach($html->find('span.price') as $p)
    echo $p->innertext .',';    

$q = "INSERT INTO jeans (`image`, `price`) VALUES ('$a', '$p')";
$r = @mysqli_query ($dbc, $q) or die ("Update query failed : " . mysql_error());;  //Run the Query.

4 个答案:

答案 0 :(得分:2)

在您的示例代码中,$ a和$ p是对象,请尝试以下方法:

$a = '';
foreach($html->find('#items') as $item) {
    $a.= $item->innertext .'<br>';
}

$p = '';
foreach($html->find('span.price') as $price) {
    $p.= $price->innertext.',';    
}

接下来,从@mysqli_query中删除@,尽量不要使用它,尝试正确地捕获/处理错误。

接下来,请花几分钟时间研究参数化的查询和PDO,不要接受未知的输入(不要再来自第三方)并将它们直接注入到你的SQL中:

$q = "INSERT INTO jeans (`image`, `price`) VALUES ('$a', '$p')";

即:不要那样做^

最后,您可能希望验证get的响应。

希望有所帮助!

答案 1 :(得分:1)

您通过在mysqli_query

之前加上@来抑制错误

尝试更改此内容:

$q = "INSERT INTO jeans ('image', 'price') VALUES ('$a', '$p')";
mysqli_query ($dbc, $q) or die ("Update query failed : " . mysql_error());;  //Run the Query.

答案 2 :(得分:0)

我想我知道出了什么问题。

如果您只是使用

echo file_get_contents("http://www.asos.com/Women/Jeans/Cat/pgecategory.aspx?cid=3630");

(或者只是asos.com,没关系),你会发现你总会回来:

  

抱歉,我们找不到该页面或出错的地方......

     

回去或尝试:

     女性男性家庭服务台

因为您指定的元素都不在此页面上,所以您的代码将不会返回任何内容。

我的猜测是asos.com阻止从他们的网站上抓取。

答案 3 :(得分:0)

请记住使用mysql_real_escape_string函数以避免保存内容的麻烦。示例如下。

$query2 = sprintf("INSERT INTO jeans(image, price)  
                 VALUES ('%s','%s')",mysql_real_escape_string($a),
                                     mysql_real_escape_string($p))
mysql_query($query2) or die(mysql_error()."<br />".$query2);