与PHP一起使用api时出现SQL语法错误

时间:2011-12-15 01:41:56

标签: php mysql syntax

我收到了监护人api的回复,设法将其加载到变量中,我试图将内容放入相关的数据库表中,但它出现了以下错误:

  

错误:您的SQL语法出错;查看与您的MySQL服务器版本对应的手册,以获得正确的语法

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://content.guardianapis.com/?format=json&show-     fields=all&show-related=true&order-by=newest&show-most-viewed=true&api-    key=srty8vfmpgjhjakk4k6edbjb");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_ENCODING, "gzip");
$response_api = curl_exec($curl);
curl_close($curl);

require_once 'Zend/Json.php'; 
$val = Zend_Json::decode($response_api); 
foreach ($val['response']['mostViewed'] as $result) {
$title = $result['webTitle']; 
$url = $result['webUrl'];
$body_text = $result['fields']['body'];
$title = utf8_decode($title);
$body_text = utf8_decode($body_text);


$sql="INSERT INTO news_data (title, content)
VALUES
('$title','$body_text')";

if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
 }
}

mysql_close($con);

?>

我是否收到此错误,因为文章中有一些奇怪的字符我试图加载到某些变量然后加载到我的数据库中?

谢谢

JB

2 个答案:

答案 0 :(得分:1)

试试这个

$sql="INSERT INTO `news_data` (`title`, `content`)
VALUES
('".mysql_real_escape_string($title)."','".mysql_real_escape_string($body_text)."')";

答案 1 :(得分:1)

如果您使用的是过时的mysql扩展和字符串连接,那么您还需要在每个字符串变量上应用mysql_real_escape_string()。在您的情况下,这是$title$body_text。否则,单个引号将使您的INSERT查询对MySQL服务器不可解析。 (和potential security issues,bla bla ...)