Ben Carter
2023-05-17, 20:48:36
Hallo!
Da ich in den letzten Jahren fast nur noch mit SQL Server gearbeitet habe, bin ich bei MySQL etwas eingerostet.
Folgendes Problem:
Ich mache ein Insert in eine Tabelle. Unter anderem mit einer GUID. Direkt nach dem Insert will ich diesen Datensatz anhand der GUID wieder lesen. Für beide Queries verwende ich Prepared Statements.
Der Datensatz ist aber nicht direkt vorhanden.
Nach dem Insert schließe ich das Statement und führe auch ein Commit aus. Wenn ich eine Sekunde warte (mit sleep) funktioniert es. Aber das kann nicht Sinn der Sache sein.
Wie löst man das ordentlich?
Auszug aus der Methode:
$sql = "INSERT INTO user (guid, username, password, salt, email, avatarUrl, discordId, registerDate) VALUES (?, ?, ?, ?, ?, ?, ?, NOW());";
$statement = DB::$db->prepare($sql);
$statement->bind_param('sssssss', $guid, $username, $password, $salt, $email, $avatarUrl, $discordId);
$result = $statement->execute();
$statement->close();
DB::$db->commit();
if ($result) return $this->getUserByGuid($guid);
public function getUserByGuid($guid)
{
$sql = "SELECT * FROM user WHERE guid = ?;";
$statement = DB::$db->prepare($sql);
$statement->bind_param('s', $guid);
$statement->execute();
$result = $statement->get_result();
$rows = $result->fetch_all(MYSQLI_ASSOC);
if (count($rows) == 0) return false;
else return $rows[0];
}
Wenn ich eben vor dem Aufruf der Methode getUserByGuid ein "sleep(1);" einfüge, klappt's.
Langsam bringt mich das zum Verzweifeln...
Vielen Dank,
lg Ben
Da ich in den letzten Jahren fast nur noch mit SQL Server gearbeitet habe, bin ich bei MySQL etwas eingerostet.
Folgendes Problem:
Ich mache ein Insert in eine Tabelle. Unter anderem mit einer GUID. Direkt nach dem Insert will ich diesen Datensatz anhand der GUID wieder lesen. Für beide Queries verwende ich Prepared Statements.
Der Datensatz ist aber nicht direkt vorhanden.
Nach dem Insert schließe ich das Statement und führe auch ein Commit aus. Wenn ich eine Sekunde warte (mit sleep) funktioniert es. Aber das kann nicht Sinn der Sache sein.
Wie löst man das ordentlich?
Auszug aus der Methode:
$sql = "INSERT INTO user (guid, username, password, salt, email, avatarUrl, discordId, registerDate) VALUES (?, ?, ?, ?, ?, ?, ?, NOW());";
$statement = DB::$db->prepare($sql);
$statement->bind_param('sssssss', $guid, $username, $password, $salt, $email, $avatarUrl, $discordId);
$result = $statement->execute();
$statement->close();
DB::$db->commit();
if ($result) return $this->getUserByGuid($guid);
public function getUserByGuid($guid)
{
$sql = "SELECT * FROM user WHERE guid = ?;";
$statement = DB::$db->prepare($sql);
$statement->bind_param('s', $guid);
$statement->execute();
$result = $statement->get_result();
$rows = $result->fetch_all(MYSQLI_ASSOC);
if (count($rows) == 0) return false;
else return $rows[0];
}
Wenn ich eben vor dem Aufruf der Methode getUserByGuid ein "sleep(1);" einfüge, klappt's.
Langsam bringt mich das zum Verzweifeln...
Vielen Dank,
lg Ben