Ошибка синтаксиса удаления SQL, также некоторые PHP и Jquery - PullRequest
1 голос
/ 08 мая 2011

У меня есть таблица базы данных с именем 'favourcats' со следующими полями:

  • id
  • catName
  • CatID

Я использую Jquery для запуска этой функции при событии щелчка элемента в DOM Ready.

// Delete a Favorite Category from SQL Database
    $('.deleteCatFavs').click(function(){      // On click of .deleteCatFavs
    var actionRequested = "AJAX_delFavCat";    // My Personal PHP Controller Identifier
    var url = "index.php";                     // URL to post to

// Now Im getting the data I want to post into variables.
    var catId = $("input[name=FavCats]:checked").val();
    var rowId = $("input[name=FavCats]:checked").attr("id");

// Now we make the post
    $.post(url, {AJAX_Action: actionRequested, rowId: rowId},
        function(data){
            $("#favCats").fadeIn().html(data);
           });
    });

Это все отлично работает,

Но ниже У меня есть PHP-код для удаления выбранного rowId сверху из базы данных. Вот где у меня проблема, я уверен, что это ошибка SQL.

public function AJAX_delFavCat(){

$rowId = isset($_POST['rowId'])?$_POST['rowId']:''; // Get Posted Variable
// Below, I want to delete the posted rowId, from the DB,
$this->database->query("DELETE FROM 'favoritecats' WHERE id='$rowId'");

// My personal Loaders, I need help with the delete query above!!
$data = $this->database->query("SELECT * FROM favoritecats");
$this->load->view('Ajax_addToFavCats.php', $data, $ajax=1);

} // End

«УДАЛИТЬ ИЗ« ИЗБРАННЫХ КИТОВ », ГДЕ id = '$ rowId'" не работает, что я делаю неправильно? [EDIT]
Я получаю следующую ошибку через SQL: У вас есть ошибка в вашем синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса для использования рядом с '' favourcats 'WHERE id = '27' 'в строке 1

Кроме того, как бы я написал функцию Jquery, используя метод $ .ajax вместо метода $ .post, который я сейчас использую, это действительно имеет значение?

Ответы [ 2 ]

2 голосов
/ 08 мая 2011

что я делаю не так?

У вас есть дыра в безопасности SQL-инъекций.
См .: Как работает SQLинъекция из комиксов XKCD «Таблицы Бобби»?

Изменить это

$rowId = isset($_POST['rowId'])?$_POST['rowId']:''; // Get Posted Variable
// Below, I want to delete the posted rowId, from the DB,
$this->database->query("DELETE FROM 'favoritecats' WHERE id='$rowId'");

На это

$rowId = isset($_POST['rowId'])?$_POST['rowId']:''; // Get Posted Variable
$rowId = mysql_real_escape_string($rowId);
// Below, I want to delete the posted rowId, from the DB,
$this->database->query("DELETE FROM `favoritecats` WHERE id='$rowId'");

Чтобы правильно избежать ваших вводов.

Вернуться к вашему вопросу

$this->database->query("DELETE FROM `favoritecats` WHERE id='$rowId'");

Исправит вашу ошибку.
Обратите внимание на использование обратных галочек вокруг имен таблиц, обычные кавычки недопустимы и фактически являются syntax error.

0 голосов
/ 08 мая 2011

Имя таблицы не должно быть в одинарных кавычках.Используйте обратные пометки или оставьте все как есть.

DELETE FROM 'favoritecats' - wrong
DELETE FROM `favoritecats` - correct
DELETE FROM favoritecats - also correct
...