SE VOCÊ ESTIVER USANDO INNODB:
Se você estiver usando o INNODB, já que verificou que a linha foi inserida, ela deveria ter sido retornada com o SELECT, desde que o SELECT estivesse consultando a chave da linha real que foi inserida. (Tem certeza de que não está usando um recurso como INSERT DELAYED? Isso pode impedir que a linha seja retornada.)
SE VOCÊ ESTIVER USANDO MYISAM:
Como o MyISAM não suporta transações, o SELECT deve retornar a inserção, mas não consigo encontrar nada que declare que isso é realmente garantido.
NOTA:O primeiro URL listado abaixo indica se você estiver usando MYISAM (o padrão de acordo com este link),INSERTS bloqueará a tabela. No entanto, a segunda URL afirma que o bloqueio colocado por uma inserção é um bloqueio legível, de modo que não deveria ter impedido a leitura da tabela.
http://www.sitepoint.com/mysql-mistakes-php-developers/
http://aarklondatabasetrivia .blogspot.com/2009/04/how-to-lock-and-unlock-tables-in-mysql.html
SE VOCÊ ESTIVER USANDO INNODB (CONTINUAÇÃO):
- Se AUTOCOMMIT estiver em uso em seu sistema (não tenho certeza) você deve ter visto a linha selecionada (esta pergunta afirma que a linha inserida foi verificada como tendo sido adicionada ao banco de dados).
- Se uma transação estiver em uso, a transação deve ter sido confirmada (esta pergunta afirma que a linha inserida foi verificada como tendo sido adicionada ao banco de dados).
Tem certeza de que a consulta SELECT executada na primeira vez é a mesma da segunda vez?
Tem certeza
$user['social_id']
é o mesmo valor após o INSERT e no momento do SELECT? - Se você estiver se referindo a uma linha inserida em outra transação, ao invés de estar na sessão que está fazendo a inserção, então esta URL:
http://blogs. innodb.com/wp/2011/04/get-started-with-innodb-memcached-daemon-plugin/
afirma "você precisará fazer "ler não confirmado" selecionar para encontrar as linhas recém-inseridas:"
IE set session TRANSACTION ISOLATION LEVEL ler não confirmado;
http://dev.mysql.com/doc/refman /5.0/en/set-transaction.html
(Este recurso pode depender da versão do MYSQL em uso)
- Se, por algum motivo, você estiver usando INSERT DELAYED, a linha pode não ser retornada
NOTAS:De acordo com esta URL, SE você iniciou uma transação, as linhas selecionadas são mostradas na próxima instrução SELECT (não em PHP):
http://zetcode.com/databases/mysqltutorial/transactions/
Esta declaração implica que se você iniciar uma transação, você não precisa definir AUTOCOMMIT:
"O MySQL também confirma automaticamente as instruções que não fazem parte de uma transação."
Este URL descreve como iniciar uma transação em PHP:
Exemplos de transações PHP + MySQL