我使用这个DOMXpath查询:
$html = file_get_contents("http://localhost:8888/stockPrices.php");
libxml_use_internal_errors(true);
$doc = new \DOMDocument();
if($doc->loadHTML($html))
{
$result = new \DOMDocument();
$result->formatOutput = true;
$table = $result->appendChild($result->createElement("table"));
$thead = $table->appendChild($result->createElement("thead"));
$tbody = $table->appendChild($result->createElement("tbody"));
$table->setAttribute('class', 'table table-hover');
$xpath = new \DOMXPath($doc);
$newRow = $thead->appendChild($result->createElement("tr"));
foreach($xpath->query("//table[@id='kurstabell']/thead/tr/th[position()>1]") as $header)
{
$newRow->appendChild($result->createElement("th", trim($header->nodeValue)));
}
foreach($xpath->query("//table[@id='kurstabell']/tbody/tr") as $row)
{
$newRow = $tbody->appendChild($result->createElement("tr"));
foreach($xpath->query("./td[position()>1]", $row) as $cell)
{
$newRow->appendChild($result->createElement("td", trim(htmlentities($cell->nodeValue))));
}
}
echo $result->saveXML($result->documentElement);
}
此查询生成此300行+ HTML表:
+-----------+-----------+--------+--------+--------+--------+--------+--------+------------+----------+--------+
| Stock | PrevClose | +/- | % | Bid | Ask | High | Low | Volume | Currency | Time |
+-----------+-----------+--------+--------+--------+--------+--------+--------+------------+----------+--------+
| Appel Inc | 119.50 | 1,03 | -0,85% | 119.42 | 119.60 | 120 | 118 | 49,365,254 | USD | 13:00 |
| Fake Inc | 55 | 3 | 0,05 | 54 | 55,5 | 56 | 52 | 1,231,32 | USD | 13:00 |
| etc... | etc... | etc... | etc... | etc... | etc... | etc... | etc... | etc... | etc... | etc... |
+-----------+-----------+--------+--------+--------+--------+--------+--------+------------+----------+--------+
我试图将这些列插入到带
的数组中foreach($xpath->query as $key => $value) {
$data = [
'stock' => trim($value->getElementsByTagName('tr')->item(0)->nodeValue),
'prevclose' => trim($value->getElementsByTagName('tr')->item(1)->nodeValue),
'high' => trim($value->getElementsByTagName('tr')->item(6)->nodeValue),
'low' => trim($value->getElementsByTagName('tr')->item(7)->nodeValue),
'volume' => trim($value->getElementsByTagName('tr')->item(8)->nodeValue),
'timestamp' => NOW()
];
}
echo "<pre>";
print_r($data);
echo "</pre>";
使用
将结果循环到数据库中$sql = "INSERT INTO stock_list (`stock`, `prevclose`, `high`, `low`, `volume`, `timestamp`) VALUES
(:stock, :prevclose, :high, :low, :volume, :timestamp)";
$query->database->prepare($sql);
foreach($data as $stock){
$query->execute(array(':stock' => $stock->stock,
':prevclose' => $stock->prevclose,
':high' => $stock->high,
':low' => $stock->low,
':volume' => $stock->volume,
':timestamp' => NOW()
));
}
但var_dump
和print_r
$ data都返回null
我的问题:
如何插入股票, PrevClose ,高,低和音量进入mysql表?