@Alcospb

Получаю XML, как его записать в БД?

Привет

Получаю из Яндекса XML с результатами поиска. Хочу весь запрос записать в БД, чтобы позже с ним поработать и не плодить лишние запросы. При попытке записи выдает ошибку:

SQLSTATE[42000]: Syntax error or access violation: 1064 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 '0, 1) VALUES ('yandexResponse', 'Array')' at line 1

Вероятно, нужно преобразовать XML в строку (но так, чтобы потом можно было с ним работать). Как это сделать?

$queryUrl = 'http://xmlsearch.yandex.ru/xmlsearch?user=p-garmashov&key=03.122774881:0924b61e5fb2b3a0b877b96e2150d192&query=' . 'фильм%20' . $data['title1'] . '&l10n=ru&sortby=rlv&filter=none&maxpassages=1&groupby=attr%3D%22%22.mode%3Dflat.groups-on-page%3D10.docs-in-group%3D1';

			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $queryUrl);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
			$response = curl_exec($ch);
			curl_close($ch);


			if ( $response ) {
				$app['dbs']['local'] -> insert("yandexResponse", [
					'yandexResponse', 
					[
						'response' => $response, 
						'time' => time(), 
						'title1' => $data['title1']
					]
				]);
			}
  • Вопрос задан
  • 19550 просмотров
Решения вопроса 1
MintTea
@MintTea
serialize / unserialize
$app['dbs']['local'] -> insert("yandexResponse", [
    'yandexResponse', 
    serialize([
        'response' => $response, 
        'time' => time(), 
        'title1' => $data['title1']
    ])
]);
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@IceJOKER
Web/Android developer
Я бы порекомендовал спарсить xml и только после нужное записать в бд.
а если все таки настаиваете на записи целого xml, то просьба выложить сам запрос, а то не понятно где ошибка.
НО, думаю что дело в кавычках, экранируйте их
Ответ написан
FanatPHP
@FanatPHP
Чебуратор тега РНР
Жесть. Что вопрос, что ответ.
Мало того, что аффтар использует какую-то самопальную приблуду для работы с БД и спрашивает у посторонних людей, как ей пользоваться.
Так еще и ответ, который 100% не будет работать, но зачем-то аффтаром помечен как рабочий.

Судя по ошибке, в вызове присутствует лишний yandexResponse. И никакой сериалайз ее не исправит (и, главное - не нужен). Но ведь у наших приматов в голове органчик, в котором над молоточками прислюнявлены бумажки с надписью "сохранить неведомую фигню в БД? serizlize!" или "ошибка при вставке в БД? экранировать!". И при поступлении ключевого слова активируется тот или иной молоточек, выдавая текст ответа в обход головного мозга. И даже не возникает мысли - зачем сериализовывать строки и почему надо экранировать значение, если ошибка в имени поля.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы