Я использую php, чтобы получить запрос песни через ajax и сохранить его в базе данных postgres.
Все находится в героку, и я могу нормально подключиться к базе данных с помощью pgadmin
Я получаю следующую ошибку - как правильно взять строку из запроса GET и записать в db?
2014-08-24T01: 43: 32.062128 + 00: 00 app [web.1]: [Вс, 24 августа 01: 43: 31.864706 2014] [proxy_fcgi: error] [pid 64: tid 139700481152768] [клиент 10.53.42.218:51189] AH01071: Получено сообщение PHP об ошибке: PHP Предупреждение: pg_query (): сбой запроса: ОШИБКА: синтаксическая ошибка около или около "\" \ nСтрока 1: ВСТАВИТЬ В песни (запрос) ЗНАЧЕНИЯ (\ 'song \') \ n
^ в /app/songs.php в строке 21 \ n ', ссылка: http://sep21.herokuapp.com/2014-08-24T01: 43: 32.062130 + 00: 00 app [web.1]: [24-Aug-2014 01:43:31] ПРЕДУПРЕЖДЕНИЕ: [pool www] дочерний элемент 61 сказал в stderr: "УВЕДОМЛЕНИЕ: сообщение PHP: Предупреждение PHP: pg_query (): сбой запроса: ОШИБКА: синтаксическая ошибка около "\" "
2014-08-24T01: 43: 32.062132 + 00: 00 app [web.1]: [24-Aug-2014 01:43:31] ПРЕДУПРЕЖДЕНИЕ: [pool www] ребенок 61 сказал в stderr: «СТРОКА 1: ВСТАВИТЬ В песни (запрос) ЦЕННОСТИ (\ 'песня \') "
2014-08-24T01: 43: 32.062134 + 00: 00 приложение [web.1]: [24-августа-2014 01:43:31] ВНИМАНИЕ: [pool www] ребенок 61 сказал в stderr: "
^ в /app/songs.php в строке 21 "
Код выглядит следующим образом:
CREATE TABLE songs
(
request character varying[] NOT NULL,
created bigint,
id bigserial NOT NULL,
CONSTRAINT "Pk" PRIMARY KEY (id)
)
$.ajax({
type: "GET",
url: "songs.php",
data: q,
success: function(resp){
// console.log(q)
// console.log(resp)
try{var song_resp = JSON.parse(resp)}
catch(err){var song_resp = err}
// console.log(song_resp)
// console.log(target)
if (song_resp.pass == true){
$("#nice_choice").slideDown(250)
// $("#nice_choice").css("-webkit-animation-play-state","running")
// $("#nice_choice").css("-animation-play-state","running")
}
else {
$("#something_wrong").slideDown(250)
// $("#something_wrong").css("-webkit-animation-play-state","running")
// $("#something_wrong").css("-animation-play-state","running")
}
},
error: function (jqXHR, exception){
$("#something_wrong").slideDown(300)
// $("#something_wrong").css("-webkit-animation-play-state","running")
// $("#something_wrong").css("-animation-play-state","running")
}
}); // Ajax Call
<?php
if ($_GET['q']){
$song = $_GET["q"];
$dbconn = pg_connect("host=ec2-54-247-111-1.eu-west-1.compute.amazonaws.com
dbname=dbname
user=user
password=pw")
or die('Could not connect: ' . pg_last_error());
$result = pg_query($dbconn, "INSERT INTO songs (request) VALUES(\'song\')");
//dump the result object
if ($result == false) {
echo false;
}
else{
echo true;
}
// Closing connection
pg_close($dbconn);
}
?>
1 ответ
Используйте pg_query_params
или предпочтительно PDO. Не делайте собственных цитат. Всегда. Это просто неправильно и проблемы хорошо задокументированы в руководстве по PHP.
Желательно использовать PDO.
(Непосредственная проблема заключается в неправильном цитировании. Вы использовали \'
для экранирования одинарных кавычек, где экранирование не требуется, поэтому обратная косая черта сохраняется в последней строке запроса. Вы можете увидеть это в сообщении об ошибке) .
Похожие вопросы
Новые вопросы
php
PHP — это открытый, мультипарадигмальный, динамически типизированный и интерпретируемый язык сценариев, изначально разработанный для веб-разработки на стороне сервера. Используйте этот тег для вопросов о программировании на языке PHP.