PDO не может вернуть last_insert_id

   <?php
session_start();


$userid = $_SESSION['userid'];
$categorynumber=0;
$categorynumber = create_category($userid);
//keep the category number for future reference
if($categorynumber > 0){
$_SESSION['categorynumber'] = $categorynumber;
}

echo $categorynumber;



?>

echo $ categorynumber prints 0

    function create_category($userid)
{

// connect to database with PDO
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_DATABASE;
$dbh = new PDO($dsn, DB_USER, DB_PASSWORD);

// insert category and get the category_id
$categorynumber = 0;
$stmt = $dbh->prepare("INSERT INTO categories (userid, name) VALUES (:userid, :name);SELECT LAST_INSERT_ID();");
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$stmt->bindValue(':name', 'test7', PDO::PARAM_STR);
if ($stmt->execute())
{
$result = array();
while ($row = $stmt->fetch()) {
array_push($result, $row);
}

if (isset($result[0][0]))
$categorynumber = $result[0][0];

}

// close database and return null
$dbh = null;
return $categorynumber;
}

Что я здесь делаю неправильно, так что я не могу получить последний идентификатор созданной записи? Как я могу вернуть last_insert_id (); и присвойте его $ _SESSION [‘categorynumber’] ??

0

Решение

Мне удалось достичь того, что я хотел, с помощью следующей строки:

$categorynumber = $dbh->lastInsertId();

полный пример:

    function create_category($userid)
{

// connect to database with PDO
$dsn = 'mysql:host='.DB_HOST.';dbname='.DB_DATABASE;
$dbh = new PDO($dsn, DB_USER, DB_PASSWORD);

// insert category and get the category_id
$categorynumber = 0;
$stmt = $dbh->prepare("INSERT INTO categories (userid, name) VALUES (:userid, :name);");
$stmt->bindValue(':userid', $userid, PDO::PARAM_STR);
$stmt->bindValue(':name', 'test7', PDO::PARAM_STR);
$stmt->execute();
$categorynumber = $dbh->lastInsertId();

// close database and return null
$dbh = null;
return $categorynumber;
}
0

Другие решения

Других решений пока нет …