2013-10-01 3 views
1

Рассмотрим эту базу данных:MySQLi вставить запрос успешно, но нет строки в таблице?

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 скрипт на другом домене:

Client 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).')'; 
    } 
} 
?> 

Это Лоо ks, как работает INSERT. Я получаю верный «insert_id» в JSON. Я также попытался вернуть число затронутых строк, которое показывает «1». Но почему-то, когда я смотрю на эту таблицу, в таблице нет строк?

Я могу вручную вставить в эту таблицу, используя тот же оператор INSERT, вошедший в систему как один и тот же пользователь («root» - просто чтобы сузить его!). Я не получаю никаких ошибок PHP, а $db->error ничего не возвращает. Если после этого я посмотрю на таблицу в MySQL, поле auto increment ID увеличится на единицу, но данных не будет.

Любые идеи ?!

+0

'mysqli_select_db()', чтобы убедиться, что вы пишете для правильного схемы? например у вас нет одинаковой таблицы, установленной в базе данных 'test' - если' test' является значением по умолчанию ... может быть длинным. – CD001

ответ

3

Удалить ниже линии:

$db->autocommit(FALSE); 

Это означает, что данные не получите привержен диск автоматически.

+0

О, да .. или добавьте в '-> commit()' call, пропустили это :) – CD001

+0

Ahh, хорошо заметили! Спасибо. – Mike

+0

Осторожно, чтобы кто-либо еще сюда пришел ... '$ db-> insert_id' предоставит вам следующую запись и переместит указатель AUTO INCREMENT вперед, даже если запись не будет добавлена ​​/ зафиксирована. Кажется, это ошибка (IMHO) MySQL. – Sablefoste

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 
}); 
Смежные вопросы