Witam, mam problem ze zrobieniem update'a do sesji. Robię projekt na zaliczenie przedmiotu na studia, domyślam się co jest źle tylko nie mam pojęcia jak to naprawić. Taki błąd otrzymuje:
Fatal error: Uncaught PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '0' for key 'PRIMARY' in C:\xampp\htdocs\sklep\sessions.php:103 Stack trace: #0 C:\xampp\htdocs\sklep\sessions.php(103): PDOStatement->execute() #1 C:\xampp\htdocs\sklep\doLogin.php(9): session->updateSession(Object(user)) #2 {main} thrown in C:\xampp\htdocs\sklep\sessions.php on line 103.
Session id, jest tworzone poprzez losowy ciąg znaków, a w pewnym momencie zmienia swoja wartość przez, co w bazie wystepuje duplikacja. Zdjęcie z bazy w załączniku.
global $pdo, $request;
$newId = random_session_id();
$newSalt = random_salt(10);
setcookie(SESSION_COOKIE, $newId, time() + SESSION_COOKIE_EXPIRE);
$stmt = $pdo->prepare("UPDATE sessions SET salt_token = :salt, updated_at = :time, session_id = :newId, user_id = :uid
WHERE session_id = :sid");
$stmt->bindValue(':salt', $newSalt, PDO::PARAM_STR);
$stmt->bindValue(':time', time(), PDO::PARAM_INT);
$stmt->bindValue(':newId', $newId, PDO::PARAM_INT);
$stmt->bindValue(':uid', $user->getId(), PDO::PARAM_INT);
$stmt->bindValue(':sid', $this->id, PDO::PARAM_STR);
$stmt->execute();
$this->id = $newId;
$this->user = $user;
}```php
A tak tworze session_id :
```function random_session_id(){
$utime = time();
$id = random_salt(40-strlen($utime)).$utime;
return $id;
}
function random_salt($len){
return random_text($len);
}
function random_text($len){
$base = 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890';
$max = strlen($base)-1;
$rstring = '';
mt_srand((double)microtime()*1000000);
while(strlen($rstring) < $len)
$rstring.=$base[mt_rand(0,$max)];
return $rstring;
}```php
Z góry dziękuje za pomoc.