2017-07-12 118 views
0

IM,但它總是返回0。lastInsertID返回0,即使使用功能PDO :: lastInsertID(也mysqli_insert_id發生)的持久連接

我已經擡頭的問題,並看到,這應該已經解決了這一問題:MySQL: LAST_INSERT_ID() returns 0 通過開啓phpMyAdmin的「的config.inc.php」文件persistentConnections,但問題仍然存在...

我的表「保留」的主鍵,其AUTO_INCREMENTs。

這裏是我的代碼:

我得到了我的網站上一個按鈕,用於調用此JavaScript代碼:

function sonderbuchung() 
{ 
    setReservationType(); 
    getSonderbuchungID(); 
} 


function getSonderbuchungID() { 
    $.ajax({ 
     url:'sonderbuchungEditID.php', 
     complete: function (response) { 
      $('#output').html(response.responseText); 
     }, 
     error: function() { 
      $('#output').html('Bummer: there was an error!'); 
     } 
    }); 
    return false; 
} 

function setReservationType() 
{ 
    $.ajax({ 
    url: "reservationType.php", 
    type: "POST", 
    data: 'reservationtype=sonderbuchung', 
    success: function(data) { 
     $('#output').html(data); 
    }, 
    error: function(data) { 
     $('#output').html(data.responseText) 
    }, 
}); 

} 

在我的MySQL服務器有一個插入happend後生成一個隨機字符串,現在我想通過查看最後一個插入的ID並將其作爲randomString來獲取隨機字符串。 (尚未執行顯然「這個問題的原因)

sonderbuchungEditID.php:

<?php 
require_once('bdd.php'); //Database connection 
echo($bdd->lastInsertID()); 
?> 

reservationType.php(所有細的工作,只爲所有代碼的緣故)

<?php 
require_once('bdd.php'); 

if(isset($_POST['reservationtype'])){ 

$reservationtype = $_POST['reservationtype']; 

$sql = "INSERT INTO reservations(reservationtype) values ('$reservationtype')"; 

$query = $bdd->prepare($sql); 
if ($query == false) { 
    file_put_contents('LOGname.txt', print_r($bdd->errorInfo(), true)); 

    die ('Error prepairing'); 

    } 
    $sth = $query->execute(); 
    if ($sth == false) { 
    file_put_contents('LOGname.txt', print_r($query->errorInfo(), true)); 
    die ('Error executing'); 
    } 

} 


?> 
+0

要調用獲得最後一個插入ID不插入任何內容。它只在插入語句執行後立即生效。 –

+0

所以我應該使用lastInsertID並直接在「reservationType.php」中回顯它? –

+0

請參閱下面的答案。 –

回答

0

你需要在插入行時捕獲和存儲ID。

sonderbuchungEditID.php:

<?php 
    echo isset($_SESSION['last_id']) ? $_SESSION['last_id'] : "-1"; 
?> 

reservationType.php:

<?php 
require_once('bdd.php'); 

if(isset($_POST['reservationtype'])){ 
    $reservationtype = $_POST['reservationtype']; 
    $sql = "INSERT INTO reservations(reservationtype) values ('$reservationtype')"; 
    $query = $bdd->prepare($sql); 
    if ($query == false) { 
     file_put_contents('LOGname.txt', print_r($bdd->errorInfo(), true)); 
     die ('Error prepairing'); 
    } 
    $sth = $query->execute(); 
    if ($sth == false) { 
     file_put_contents('LOGname.txt', print_r($query->errorInfo(), true)); 
     die ('Error executing'); 
    } else { 
     // Remember the last ID inserted. 
     $_SESSION['last_id'] = $bdd->lastInsertID(); 
    } 
} 


?> 
+0

非常感謝! –

+1

就像其他人的快速信息一樣:您首先必須開始會話才能使用! –

+0

如果這對你有用,請接受答案。 –