Получить последнюю запись в MySQL - PullRequest
0 голосов
/ 14 марта 2012

Используя этот код php:

try{
    $dbh = new PDO("mysql:host=$host;dbname=$dbname",$user,$pass);
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );  
    // INSERT CLEAN DATA INTO TABLE…
    $sth = $dbh->prepare("
    INSERT INTO Fan(fanNm,fanEmail,fanPass,fanDynamSalt)
    VALUES('$userName','$userEmailAddress','$userPassword','$dynamSalt')"
    );
    $sth->execute();
    ////////////////////////////////////////////////////////////////////
    ## Set Session Var for this PK ID in Fan table that is being created ##
    ////////////////////////////////////////////////////////////////////
    $_SESSION['newUserSessID'] = mysql_insert_id();
    echo "<strong style='color:#fff;'>".$_SESSION['newUserSessID']."</strong>";
} //try

catch(PDOException $e){
        echo "Oops, We're experiencing an error.";
        file_put_contents('/PDODBConnectionErrors.txt', $e->getMessage(), FILE_APPEND);  
} //catch

Он вставляет FINE в базу данных, но я использую echo "<strong style='color:#fff;'>".$_SESSION['newUserSessID']."</strong>";, чтобы вывести это значение, и ВСЕГДА возвращает ноль.

Даже если я бегу:

SELECT LAST_INSERT_ID( ) 
FROM Fan
LIMIT 0 , 30

Это дает мне вывод, как

0
0

(поскольку в таблице базы данных есть две строки)

Любой

Ответы [ 2 ]

3 голосов
/ 14 марта 2012

Вы не должны использовать mysql_insert_id, поскольку это не является частью PDO (именно это вы используете для взаимодействия с базой данных в этом случае).

Вместо этого используйте PDO::lastInsertId():

$_SESSION['newUserSessID'] = $dbh->lastInsertId();

Подробнее: http://www.php.net/manual/en/pdo.lastinsertid.php

0 голосов
/ 14 марта 2012

Вы смешиваете PDO с общими MySQL функциями. Проблема в том, что mysql_last_insert не имеет ресурса, и поэтому возвращает 0 для false. Не смешивайте PDO с общими MySQL функциями.

Чтобы получить последний идентификатор вставки в PDO, сделайте это: $dbh->lastInsertId()

http://php.net/manual/en/pdo.lastinsertid.php

...