Php MySQLi insert查询成功,但表中没有行?

Php MySQLi insert查询成功,但表中没有行?,php,mysqli,jsonp,Php,Mysqli,Jsonp,考虑一下这个数据库: var1 int(10) Auto Increment var2 varchar(255) var3 int(10) var4 tinyint(1) unsigned var5 int(10) var6 tinyint(1) unsigned [0] var7 tinyint(1) unsigned [0] 我在一个域上有一个页面,其中包含一些jQuery,可以让JSONP访问另一个域上的.php脚

考虑一下这个数据库:

var1    int(10) Auto Increment   
var2    varchar(255)     
var3    int(10)  
var4    tinyint(1) unsigned  
var5    int(10)  
var6    tinyint(1) unsigned [0]  
var7    tinyint(1) unsigned [0]
我在一个域上有一个页面,其中包含一些jQuery,可以让JSONP访问另一个域上的.php脚本:

客户端jQuery:

$.ajax({
    url:        "https://1.2.3.4/xxx/xxx.php",
    timeout:    5000,
    data: {     "var1":     "xxx",
                "var2":     "xxx",
                "var3":     "xxx",
                "var4":     "xxx",
                "var5":     "xxx",
                },
    dataType: "jsonp",
    success: function(data) {
    alert(data);
    },
});
服务器PHP:

<?php
header('content-type: application/json; charset=utf-8');
header("access-control-allow-origin: *");

if($_SERVER['HTTP_REFERER'] != "xxx" || !isset($_GET['callback']))
{
    sendResponse(400, 'Invalid request');
    exit();
}

// Check for required parameters
if (    isset($_GET["var1"]) && 
        isset($_GET["var2"]) && 
        isset($_GET["var3"]) &&
        isset($_GET["var4"]) &&
        isset($_GET["var5"]))
{
    if($_GET["var1"] == "xxx")
    {
        $var2    = $_GET["var2"];
        $var3    = intval($_GET["var3"]);
        $var4    = intval($_GET["var4"]);
        $var5    = intval($_GET["var5"]);

        $db = new mysqli('localhost', 'root', 'xxx', 'xxx');
        $db->autocommit(FALSE);

        $result = $db->query("INSERT INTO xxx (`xxx`, `xxx`, `xxx`, `xxx`) VALUES ('$var2', $var3, $var4, $var5)");
        $requestID = $db->insert_id;

        $data = array("requestID" => $requestID, "errorMessage" => $db->error);

        echo $_GET['callback'] . '('.json_encode($data).')';  
    }
}
?>

看起来这个插件可以工作。我在JSON中得到了一个有效的“insert_id”。我还尝试返回受影响行的数量,显示为“1”。但是由于某种原因,当我事后查看该表时,表中没有行

我可以使用相同的insert语句手动插入到该表中,同时以相同的用户身份登录(“root”-只是为了尝试缩小范围!)。我没有收到任何PHP错误,
$db->error
不返回任何内容。如果我随后在MySQL中查看该表,则自动增量ID字段增加了一个,但不存在任何数据

有什么想法吗

删除以下行:

 $db->autocommit(FALSE);
这意味着数据不会自动提交到磁盘。

删除以下行:

 $db->autocommit(FALSE);
这意味着数据不会自动提交到磁盘。

顺便说一下

您的Ajax/jQuery有语法错误(逗号)

$.ajax({
    url:        "https://1.2.3.4/xxx/xxx.php",
    timeout:    5000,
    data: {     "var1":     "xxx",
        "var2":     "xxx",
        "var3":     "xxx",
        "var4":     "xxx",
        "var5":     "xxx"  //<-- HERE
    },
    dataType: "jsonp",
    success: function(data) {
        alert(data);
    } //<----------------------- HERE
});
$.ajax({
url:“https://1.2.3.4/xxx/xxx.php",
超时:5000,
数据:{“var1”:“xxx”,
“var2”:“xxx”,
“var3”:“xxx”,
“var4”:“xxx”,
“var5”:“xxx”/顺便说一句

您的Ajax/jQuery有语法错误(逗号)

$.ajax({
    url:        "https://1.2.3.4/xxx/xxx.php",
    timeout:    5000,
    data: {     "var1":     "xxx",
        "var2":     "xxx",
        "var3":     "xxx",
        "var4":     "xxx",
        "var5":     "xxx"  //<-- HERE
    },
    dataType: "jsonp",
    success: function(data) {
        alert(data);
    } //<----------------------- HERE
});
$.ajax({
url:“https://1.2.3.4/xxx/xxx.php",
超时:5000,
数据:{“var1”:“xxx”,
“var2”:“xxx”,
“var3”:“xxx”,
“var4”:“xxx”,

“var5”:“xxx”//
mysqli\u select\u db()
以确保您正在写入正确的模式?例如,您在
test
数据库上没有设置相同的表-假设
test
是默认值…可能是一个长串。
mysqli\u select\u db()
以确保您正在写入正确的架构?例如,您在
测试
数据库上没有设置相同的表-假设
测试
是默认值…可能是一个longshot。哦-是的..或者添加一个
->commit()
调用,错过了:)啊,太棒了!谢谢你。对任何其他来到这里的人都要小心…
$db->insert_id
会给你下一条记录并向前移动自动递增指针,即使记录没有被添加/提交。这似乎是MySQL的一个bug(IMHO)。哦-是的..或者添加一个
->commit()
调用,错过了:)啊,发现得很好!谢谢你。对其他人的警告…
$db->insert_id
会给你下一条记录并向前移动自动递增指针,即使记录没有被添加/提交。这似乎是MySQL的一个bug(IMHO)。