HVIS DU BRUGER INNODB:
Hvis du bruger INNODB, siden du bekræftede, at rækken blev indsat, skulle den være blevet returneret med SELECT, så længe SELECT forespurgte nøglen til den faktiske række, der blev indsat. (Er du sikker på, at du ikke bruger en funktion som f.eks. INDSÆT FORSINKET? Det kunne forhindre rækken i at blive returneret.)
HVIS DU BRUGER MYISAM:
Da MyISAM ikke understøtter transaktioner, bør SELECT returnere indsættet, men jeg kan ikke finde noget, der siger, at dette faktisk er garanteret.
BEMÆRK:Den første URL listet nedenfor angiver, at hvis du bruger MYISAM (standarden ifølge dette link), vil INSERTS låse tabellen. Den anden URL angiver dog, at låsen placeret af en indsætning er en læsbar lås, så det burde ikke have forhindret tabellen i at blive læst.
http://www.sitepoint.com/mysql-mistakes-php-developers/
http://aarklondatabasetrivia .blogspot.com/2009/04/how-to-lock-and-unlock-tables-in-mysql.html
HVIS DU BRUGER INNODB (FORTSAT):
- Hvis AUTOCOMMIT er i brug i dit system (jeg er ikke sikker), skulle du have set den valgte række (dette spørgsmål angiver, at den indsatte række er bekræftet som værende tilføjet til databasen).
- Hvis en transaktion er i brug, skal transaktionen være blevet begået (dette spørgsmål angiver, at den indsatte række blev bekræftet som værende tilføjet til databasen).
Er du sikker på, at den SELECT-forespørgsel, der udføres første gang, er den samme som den anden gang?
Er du sikker på $user['social_id']
er den samme værdi efter INSERT og på tidspunktet for SELECT?
- Hvis du henviser til en række, der er indsat i en anden transaktion, i stedet for i den session, der udfører indsættelsen, så er denne URL:
http://blogs. innodb.com/wp/2011/04/get-started-with-innodb-memcached-daemon-plugin/
siger "du bliver nødt til at vælge "læs uforpligtet" for at finde de lige indsatte rækker:"
Dvs. sæt session TRANSAKTIONSISOLATIONSNIVEAU læst uforpligtet;
http://dev.mysql.com/doc/refman /5.0/da/set-transaction.html
(Denne funktion kan være afhængig af den version af MYSQL, der bruges)
- Hvis du af en eller anden grund bruger INSERT DELAYED, bliver rækken muligvis ikke returneret
BEMÆRK:I henhold til denne URL, HVIS du har startet en transaktion, vises de valgte rækker i den næste SELECT-sætning (ikke i PHP):
http://zetcode.com/databases/mysqltutorial/transactions/
Denne erklæring antyder, at hvis du starter en transaktion, behøver du ikke indstille AUTOCOMMIT:
"MySQL begår også automatisk udsagn, der ikke er en del af en transaktion."
Denne URL beskriver, hvordan man starter en transaktion i PHP:
Eksempler på PHP + MySQL transaktioner