0

最近几天我一直在研究这个脚本,似乎找不到将数据插入 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

4 回答 4

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,不要接受未知输入(至少来自第 3 方)并将它们直接注入到您的 sql 中:

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

即:不要那样做^

最后,您可能想要验证 get 的响应。

希望有帮助!

于 2012-06-21T17:03:59.560 回答
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.
于 2012-06-21T17:06:39.053 回答
0

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

如果你只是使用

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

(或者只是 asos.com,没关系),你会注意到你总会回来的:

抱歉,我们找不到该页面或出现问题...

返回或在这里尝试:

女性男性家庭服务台

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

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

于 2012-06-21T18:00:54.650 回答
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); 
于 2012-06-25T00:40:38.570 回答