Obtenha o último registro no mysql
-
13-12-2019 - |
Pergunta
Usando este código 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
Ele insere FINE no banco de dados, mas estou usando echo "<strong style='color:#fff;'>".$_SESSION['newUserSessID']."</strong>";
para repetir esse valor e SEMPRE retorna zero.
Mesmo se eu correr:
SELECT LAST_INSERT_ID( )
FROM Fan
LIMIT 0 , 30
Isso me dá uma saída como
0
0
(já que há duas linhas na tabela do banco de dados)
Qualquer um?
Solução
Você não deve usar mysql_insert_id
já que isso não faz parte do PDO (que é o que você está usando para interagir com o banco de dados nesta instância).
Em vez disso, use PDO::lastInsertId()
:
$_SESSION['newUserSessID'] = $dbh->lastInsertId();
Mais informações: http://www.php.net/manual/en/pdo.lastinsertid.php
Outras dicas
Você está misturando PDO
com genérico MySQL
funções.O problema é o mysql_last_insert
não tem recurso e, portanto, retorna 0 para falso.Não misture PDO
com genérico MySQL
funções.
Para obter o último ID de inserção no PDO, faça o seguinte:$dbh->lastInsertId()