【问题标题】:MySQLi insert query successful, but no row in the table?MySQLi插入查询成功,但表中没有行?
【发布时间】:2013-10-07 17:17:44
【问题描述】:

考虑这个数据库:

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 GET 到另一个域上的 .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).')';  
    }
}
?>

看起来 INSERT 有效。我在 JSON 中得到了一个有效的“insert_id”。我还尝试返回受影响的行数,显示为“1”。但是不知什么原因,当我后来查看该表时,表中没有行?

我可以使用相同的 INSERT 语句手动插入该表,同时以相同的用户('root' - 只是为了尝试缩小范围!)。我没有收到任何 PHP 错误,$db-&gt;error 什么也不返回。如果我之后查看 MySQL 中的表,自动增量 ID 字段增加了 1 - 但不存在数据。

有什么想法吗?!

【问题讨论】:

  • mysqli_select_db() 以确保您正在写入正确的架构?例如您没有在 test 数据库上设置相同的表 - 假设 test 是默认值......可能是一个远景。

标签: php mysqli jsonp


【解决方案1】:

顺便说一句……

您的 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
});

【讨论】:

    【解决方案2】:

    删除以下行:

     $db->autocommit(FALSE);
    

    这意味着数据不会自动提交到磁盘。

    【讨论】:

    • 哦 - 是的 .. 或添加 -&gt;commit() 电话,错过了 :)
    • 啊,很好看!谢谢。
    • 提醒任何来到这里的人...$db-&gt;insert_id 将为您提供下一条记录并向前移动 AUTO INCREMENT 指针,即使该记录未添加/提交。这似乎是 MySQL 的一个错误(恕我直言)。
    猜你喜欢
    • 2016-01-20
    • 1970-01-01
    • 2014-12-04
    • 1970-01-01
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2013-10-31
    相关资源
    最近更新 更多