php - SQL 删除语法错误,还有一些 PHP 和 Jquery

标签 php mysql sql database sql-delete

我有一个名为“favoritecats”的数据库表,其中包含以下字段:

  • 编号
  • 猫名
  • 猫号

我正在使用 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

“DELETE FROM 'favoritecats' WHERE id='$rowId'”不起作用,我做错了什么?

[编辑]
我通过 SQL 收到以下错误: 您的 SQL 语法有误;检查与您的 MySQL 服务器版本相对应的手册,以了解在第 1 行的“favoritecats”附近使用的正确语法 WHERE id='27'

此外,我如何使用 $.ajax 方法而不是我现在使用的 $.post 方法编写 Jquery 函数,这真的有区别吗?

最佳答案

what am I doing wrong?

你有一个 SQL 注入(inject)安全漏洞。
请参阅:How does the SQL injection from the "Bobby Tables" XKCD comic work?

改变这个

$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'");

将修复您的错误。
请注意在表名周围使用反引号,不允许使用普通引号,这实际上是一个语法错误

关于php - SQL 删除语法错误,还有一些 PHP 和 Jquery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5927708/

相关文章:

php - 允许的内存大小 134217728 字节已耗尽

php - php-fpm的catch_workers_output配置项是什么意思?

php - 有没有办法在 MySQL 更新查询中使用变量

MySQL 在 select 语句中使用存储过程

mysql - 更新后触发以根据条件删除行

c# - 由于似乎无法在参数化查询中指定表名,是否有安全的替代方法?

php - 使用 IOS、PHP、REST API、JSON 连接到数据库的 Web 服务

php - html/php调试

mysql - Rails 4 从 MySQL 表的迁移

sql - Hive 中是否有更简单的方法将不同的 JSON 键合并为一个?