【问题标题】:PHP PDO prepared delete statement with MySQL fails inside Ajax call [duplicate]使用 MySQL 的 PHP PDO 准备删除语句在 Ajax 调用中失败 [重复]
【发布时间】:2015-10-13 04:51:21
【问题描述】:

我在使用AJAX 调用的PHP 文件中有一个失败的 PDO Prepared DELETE 语句。

我的AJAX 电话如下所示:

var data = {action: "deleteTask", value: "1"};

$.ajax({    
        type: "POST",
        dataType: "json",
        url: "ajax.php", 
        data: data,
        success: function(data) {                
            alert(data);
        },
        error: function() {
            alert("Something's wrong!");                
        }
});

我的ajax.php 看起来像这样:

<?php 
...   
function delete(){
            $return = "something must be right...";

            require('connect.php');                            

            $sql = "DELETE FROM 'tasks' WHERE 'task_id' = ?";
            $stmt = $dbcon->prepare($sql);             
            $stmt->execute(array($_POST["value"]));

            $return["json"] = json_encode($return);
            echo json_encode($return);
        } 
?> 

这是connect.php的示例:

<?php

// Configuration
$username = 'me';
$password = '1234';
$server = 'localhost';
$database = 'mydb';

try {
    $dbcon = new PDO("mysql:host=$server;dbname=$database",$username,$password);
    $dbcon->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch(PDOException $er) {
    echo 'ERROR: ' . $er->getMessage();
}

?>

我已经确定的几件事:
1) 如果我注释掉与 PDO 语句相关的所有内容,我的 ajax 调用工作正常;
2) 我的connect.php 文件有效,因为我已经使用标准的HTML 表单对其进行了测试(而不是从ajax 调用它);
3) 表名和数据库字段名没有错别字;
4)$_POST["value"] 给出了与我尝试delete 的记录相对应的正确值。
5)当我在与 PDO 相关的每一行上设置刹车点时,当我在该行:$stmt-&gt;execute(array($_POST["value"])); 并单击“Step Into”时,它会直接跳转到Ajax 中的alert("Something's wrong!");(没有执行任何操作)该行之后的ajax.php

我花了很多时间试图找出问题所在,并阅读了有关该主题的所有帖子,但我的问题似乎很特殊,因此非常感谢任何帮助!谢谢。

【问题讨论】:

  • 您有语法错误,但您没有检查错误。问题在这里很明显
  • 另一个问题不是关于准备好的语句。我似乎也有一个问题,特别是因为 ajax.php 是从 Ajax 外部调用的。如果我用简单的 HTML 表单和 POST 方法调用它,它就可以工作。

标签: php jquery mysql ajax pdo


【解决方案1】:

好像忘记添加代码了:

delete();

添加后,您将实际调用该函数,而不仅仅是声明它。

另一种选择,尝试将 PDO 设置为打印错误。 http://php.net/manual/en/pdo.errorinfo.php 然后你会在控制台打印回错误。

【讨论】:

  • 你好,巴茨!感谢您的建议!不幸的是,事实并非如此。我在“...”部分调用该函数。该部分有一些验证内容来检查调用是否为 Ajax 调用,如果是则调用该函数。但是,我知道函数会被调用,因为我到达了 PDO 语句第一行的第一个断点。
  • 您是否尝试过打印 PDO 错误? php.net/manual/en/pdo.errorinfo.php
  • 我刚试过。 $stmt 显然没有问题。问题确实与未建立与数据库的连接有关,即使在所需的 connect.php 运行后 $dbcon 仍未启动。
  • 也许您之前没有调用过 GLOBAL,而是从幻想中调用了 $dbcon?
【解决方案2】:

您应该查看浏览器的网络响应。它应该显示一个 SQL 错误。如果您使用 MySQL,您的查询应该如下所示:

DELETE FROM `tasks` WHERE `task_id` = ?

如果是 PostgreSQL:

DELETE FROM "tasks" WHERE "task_id" = ?

【讨论】:

  • 你为什么要逃避蜱虫?
  • 我一开始无法显示刻度
  • 它们只返回列上的灰色背景字体。
  • 它现在已经工作了 - 感谢 Fred -ii-!
  • 我正在使用 MySQL。我两种方法都试过了,还是不行。我也试过不带撇号。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 2013-10-26
  • 2014-04-19
  • 1970-01-01
  • 2016-09-10
相关资源
最近更新 更多