Я использую 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);
    }
?>
0
Ammar Akhtar 24 Авг 2014 в 05:46

1 ответ

Лучший ответ

Используйте pg_query_params или предпочтительно PDO. Не делайте собственных цитат. Всегда. Это просто неправильно и проблемы хорошо задокументированы в руководстве по PHP.

Желательно использовать PDO.

(Непосредственная проблема заключается в неправильном цитировании. Вы использовали \' для экранирования одинарных кавычек, где экранирование не требуется, поэтому обратная косая черта сохраняется в последней строке запроса. Вы можете увидеть это в сообщении об ошибке) .

1
Craig Ringer 24 Авг 2014 в 05:49