以下代码通过curl
获取一个页面,从中提取一些字符串,应更新一些MySQL列。
我的问题是,对于以下代码,我是一个错误(请参阅下面的output
)。
当我复制/粘贴查询并将其放在phpmyadmin的SQL编辑器中时,它完美地运行。另外,如果我将代码中的参数$price
和$stockid
替换为输出中列出的实际数字,它也可以。怎么可能呢?
如果觉得我错过了一些非常愚蠢的东西。
$q = mysql_query("SELECT STOCK_TRADE_NAME,STOCK_ID FROM current_stocks WHERE STOCK_COUNTRY_ID = 7 LIMIT 1,9");
while ($row = mysql_fetch_array($q)) {
$stockid = $row['STOCK_ID'];
$url = "http://www.some.url.com/?stock_name=" . $row['STOCK_TRADE_NAME'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
$dom = new simple_html_dom;
$dom->load($output);
foreach($dom->find('span.amount') as $e) {
$price = str_replace(',','',$e->outertext);
}
foreach($dom->find('tr.even') as $f) {
if (strstr($f->outertext,'<td class="name">Open</td>')) {
$exp = explode('<td class="value">',$f->outertext);
$open = str_replace('</td>','',$exp[1]);
}
}
echo $stockid . " " . $price . "<br>";
mysql_query("UPDATE current_stocks SET STOCK_CURRENT_PRICE = $price WHERE STOCK_ID = $stockid") or die(mysql_error());
$ch="";
$dom="";
}
输出:
345 11.300
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '11.300 WHERE STOCK_ID = 345' at line 1
注意:STOCK_ID是INT(11),STOCK_CURRENT_PRICE是DECIMAL(8,3)
注意2:我使用的是最新的MySQL / PhpMyAdmin / PHP版本。
更新:
将查询编辑为:
$q2 = "UPDATE current_stocks SET STOCK_CURRENT_PRICE = '" . $price . "' WHERE STOCK_ID = '" . $stockid . "'";
mysql_query($q2) or die(mysql_error());
删除错误消息,但不更新数据库。
答案 0 :(得分:0)
尝试将$price
封装在引号中:'$price'
;
答案 1 :(得分:0)
快速解决方法:在查询中添加''
:
mysql_query("UPDATE current_stocks SET STOCK_CURRENT_PRICE = '$price' WHERE STOCK_ID = '$stockid'") or die(mysql_error());
更好:使用参数化查询,以便您的内容和逻辑分离:您不会遇到此问题,并且可以免费注射可能的注射:)
答案 2 :(得分:0)
如果添加引号不会改变任何内容,请检查空格字符 - 甚至可能在$price
内。是否有隐藏的标签或返回在html中不可见?
尝试类似$price = preg_replace("/'\s+'", '', $price);
(未经测试)的内容。
答案 3 :(得分:-2)
我认为这行代码是问题所在:
mysql_query("UPDATE current_stocks SET STOCK_CURRENT_PRICE = $price WHERE STOCK_ID = $stockid")
你不能在mysql查询中引用php变量,而应该使用sprintf命令创建一个文本字符串,然后将其传递给你的mysql数据库。
所以你的查询应该是:
$query = sprintf("Update current_stocks set stock_current_price = '%s' where stock_id = '%s'", $price, $stockid);
然后创建你的mysql查询引用:
mysql_query($query);
希望有所帮助。