OM DU ANVÄNDER INNODB:
Om du använder INNODB, eftersom du verifierade att raden infogades, borde den ha returnerats med SELECT, så länge som SELECT sökte efter nyckeln till den faktiska raden som infogades. (Är du säker på att du inte använder en funktion som INSERT DELAYED? Det kan förhindra att raden returneras.)
OM DU ANVÄNDER MYISAM:
Eftersom MyISAM inte stöder transaktioner bör SELECT returnera infogningen, men jag kan inte hitta något som säger att detta faktiskt är garanterat.
OBS:Den första URL-adressen nedan anger om du använder MYISAM (standard enligt denna länk), INSERTS låser tabellen. Den andra URL:en anger dock att låset som placeras av en infogning är ett läsbart lås, så det borde inte ha hindrat tabellen från att läsas.
http://www.sitepoint.com/mysql-mistakes-php-developers/
http://aarklondatabasetrivia .blogspot.com/2009/04/how-to-lock-and-unlock-tables-in-mysql.html
OM DU ANVÄNDER INNODB (Fortsättning):
- Om AUTOCOMMIT används i ditt system (jag är inte säker) borde du ha sett den valda raden (denna fråga anger att den infogade raden har verifierats som att den har lagts till i databasen).
- Om en transaktion används måste transaktionen ha genomförts (denna fråga anger att den infogade raden har verifierats som att den har lagts till i databasen).
Är du säker på att SELECT-frågan som körs första gången är densamma som andra gången?
Är du säker på att $user['social_id']
är samma värde efter INSERT och vid tidpunkten för SELECT?
- Om du hänvisar till en rad som infogats i en annan transaktion, istället för i sessionen som gör infogningen, är den här webbadressen:
http://blogs. innodb.com/wp/2011/04/get-started-with-innodb-memcached-daemon-plugin/
säger "du måste välja "läs oengagerad" för att hitta de nyss infogade raderna:"
Dvs. ställ in session TRANSACTION ISOLATION LEVEL läs oengagerad;
http://dev.mysql.com/doc/refman /5.0/en/set-transaction.html
(Denna funktion kan vara beroende av vilken version av MYSQL som används)
- Om du av någon anledning använder INSERT DELAYED, kanske raden inte returneras
ANMÄRKNINGAR:Enligt denna URL, OM du har startat en transaktion, visas de valda raderna i nästa SELECT-sats (inte i PHP):
http://zetcode.com/databases/mysqltutorial/transactions/
Detta uttalande innebär att om du påbörjar en transaktion behöver du inte ställa in AUTOCOMMIT:
"MySQL begår också automatiskt uttalanden som inte är en del av en transaktion."
Denna URL beskriver hur man startar en transaktion i PHP:
Exempel på PHP + MySQL-transaktioner