在mysql表中插入一行。它没有用?

时间:2015-08-31 21:27:23

标签: php mysql

我是PHP的新手,我正在尝试为应用构建REST API。出于某种原因,我陷入了一些应该是微不足道的事情。 我想要做的是能够在Score-table中插入一个新行,该表定义如下:

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")正确执行。我不会尝试插入重复的行。

问题是我在Score-table中没有获得新行。但是,奇怪的是,即使没有出现新行,每次尝试插入新行时,主键都会自动递增!

我可以通过手动在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;
    }

我非常感谢任何反馈,这让我很生气!

提前致谢

编辑:

这是执行前$ stmt-variable的值:

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
)

并执行后:

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
)

1 个答案:

答案 0 :(得分:1)

  

但是我已经调试了足够的代码,以便看到以下功能之外的所有功能都有效。

这次我不得不吃自己的话。事实证明我应该发布全班,因为我忘记了我设置了$this->db->autocommit(FALSE);。当我提交一切按预期工作时!

感谢您的所有意见