在mysql表中插入一行.这行不通


Inserting a row in a mysql table. It doesn't work?

我是一种新的PHP,我试图建立一个应用程序的REST API。出于某种原因,我被困在一些应该是微不足道的。我想要做的是能够插入一个新的行到计分表,它是这样定义的:

CREATE TABLE Scores(
        score_id INT AUTO_INCREMENT,
        user_id INT NOT NULL,
        item_id INT,
        score DOUBLE UNSIGNED,
        PRIMARY KEY (score_id),
        FOREIGN KEY (item_id) REFERENCES Items(internal_id),
        FOREIGN KEY (user_id) REFERENCES Users(user_id) ON DELETE CASCADE
        );
下面是我使用的PHP代码。函数setScore是一个类的成员,这个类也有dbresponse成员,你们会看到。但是我已经对代码进行了足够的调试,可以看到除了下面的函数之外的所有内容都可以正常工作。

post变量值正确,sendResponse(200, "SCORE_INSERTED_SUCCESSFULLY")执行正常。我不会尝试插入重复的行。

问题是,我没有得到一个新的行在计分表。然而,奇怪的是,我可以看到,主键是自动增加每次我试图插入一个新的行,即使没有新的行出现!

我可以通过在mysql手动运行完全相同的查询手动插入行。例如,如果我在mysql中手动运行它:

INSERT INTO Scores (user_id, item_id, score) VALUES (1,2,6.0);

那么为什么下面的不起作用呢?

function setScore() {       
        if (isset($_POST["user_id"]) && isset($_POST["item_id"]) && isset($_POST["score"]))
            {
                $user = $_POST["user_id"];
                $item = $_POST["item_id"];                
                $score = $_POST["score"];
                $query = 'INSERT INTO Scores (user_id, item_id, score) VALUES (?,?,?)';
                $stmt = $this->db->prepare($query) or trigger_error($this->db->error."[$query]");
                $stmt->bind_param("iid", $user, $item, $score);
                $stmt->execute();
                $stmt->close();                
                $this->response->sendResponse(200, "SCORE_INSERTED_SUCCESSFULLY");
                return true;
            }
        $this->response->sendResponse(400, "Invalid request");
        return false;
    }
我真的很感谢任何反馈,这让我发疯了!

Thanks in advance

编辑:

这是$stmt变量在执行前的值:

mysqli_stmt Object
(
    [affected_rows] => 0
    [insert_id] => 0
    [num_rows] => 0
    [param_count] => 3
    [field_count] => 0
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )
    [sqlstate] => 00000
    [id] => 1
)

和execute后的

mysqli_stmt Object
(
    [affected_rows] => 1
    [insert_id] => 30
    [num_rows] => 0
    [param_count] => 3
    [field_count] => 0
    [errno] => 0
    [error] => 
    [error_list] => Array
        (
        )
    [sqlstate] => 00000
    [id] => 1
)

但是我已经对代码进行了足够的调试,可以看到除了下面的函数之外,所有的东西都可以工作。

这次我不得不收回我自己的话。事实证明,我应该张贴整个类,因为我忘记了我设置$this->db->autocommit(FALSE);。当我提交时,一切都如我所料!

感谢您的评论