Ошибка синтаксиса SQL при использовании API с PHP - PullRequest
1 голос
/ 15 декабря 2011

Я получил ответ от guardian 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 ]

1 голос
/ 15 декабря 2011

Если вы используете устаревшее расширение mysql и конкатенацию строк, вам также необходимо применить mysql_real_escape_string() к каждой строковой переменной.Это $title и $body_text в вашем случае.В противном случае одиночная кавычка сделает ваш запрос INSERT непарсируемым для сервера MySQL.(И потенциальные проблемы безопасности , бла-бла ...)

1 голос
/ 15 декабря 2011

Попробуйте это

$sql="INSERT INTO `news_data` (`title`, `content`)
VALUES
('".mysql_real_escape_string($title)."','".mysql_real_escape_string($body_text)."')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...