Newsgroup: it.comp.www.php
Titolo: MySQL crea tabelle "virtuali"?

Ciao a tutti, mi sta succedendo una cosa abbastanza singolare e siccome non riesco a venirne a capo chiedo consiglio ai più esperti.
 
Ho un applicazione PHP che gestisce un database MySQL su server condiviso.
Dal mio applicativo creo tabelle temporanee che poi vengono eliminate ogni x giorni durante il cronjob; eseguo quindi classiche query e le invio a MySQL, ad esempio:
 
$sql = "CREATE TABLE tempTable SELECT * FROM customer WHERE customer_id <> 'xyz'";
$res = executeQuery($sql);
 
La funzione executeQuery() memorizza in una tabella log la query eseguita e la invia a MySQL;
 
L'applicazione continua correttamente visualizzando i dati richiesti.
Dov'è il problema??
 
Se vado con phpMyAdmin a controllare il DB, non vedo la tabella temporanea (tempTable) creata!
Sembra quasi che MySQL crei delle tabelle "virtuali" che però non sono immediatamente accessibili con phpMyAdmin!!
 
Questo potrebbe anche non interessare, ma a volte su quelle tabelle devo andare a fare altre operazioni (elaborazione dei dati ottenuti, altre select, stampe, ecc.) ed in questo caso MySQL mi ritorna con l'errore:
 
#1146 - Table 'tempTable' doesn't exist
 
Se prendo le stringhe memorizzate nel file di log e le copio in phpMyAdmin le query vengono eseguite e le tabelle temporanee create correttamente.
 
Qualcuno può darmi qualche suggerimento?


io ne so poco di mysql (non lo uso quasi mai se non x lavori 
assolutamente di basso livello), ma la prima cosa è capire come tratti 
le tabelle temporanee mysql, se esistono solo all'interno di una 
sessione o meno ad esempio (di solito sui db è così, sennò non ci 
sarebbe differenza da una tabella normale).
Cioè io su un db normale mi aspetto che creazione ed interrogazione di 
una temp table sia possibile in una sessione, se ne apro un'altra io non 
mi aspetto proprio di accederci o che sia visibile.
 
Cercando il primo risultato su gògol di temp table mysql, leggo:
 
The temporary tables could be very useful in some cases to keep 
temporary data. The most important thing that should be knows for 
temporary tables is that they will be deleted when the current client 
session terminates.
 
Temporary tables where added in MySQL version 3.23. If you use an older 
version of MySQL than 3.23 you can't use temporary tables, but you can 
use heap tables.
 
As stated earlier temporary tables will only last as long as the session 
is alive. If you run the code in a PHP script, the temporary table will 
be destroyed automatically when the script finishes executing. If you 
are connected to the MySQl database server through the MySQL client 
program, then the temporary table will exist until you close the client 
or manually destroy the table.
 
Quindi a mio avviso mysql è come tutti gli altri db...
e il cronjob è assolutamente inutile, se lo loggassi ti direbbe che non 
ha droppato nessuna tabella.
 
-- 
Z.

 sarebbe differenza da una tabella normale).
 
 
Grazie per la pronta risposta, ma non mi sembra il mio caso.
 
Le mie tabelle vengono create con:
 
 CREATE TABLE xyz SELECT * FROM ...
 
quindi non sono temporanee,  per le quali si utilizza:
 
 CREATE TEMPORARY TABLE xyz SELECT * FROM ...
 
 
I nomi assegnato di volta in volta alle tabelle sono generati dinamicamente da PHP con la funzione uniqid().
 
 
 


 
ah ok, sei tu che avevi scritto facevi tabelle temporanee :P
 
se sono tabelle normali è strano come comportamento, dato di fatto mi 
dici che dopo che hai finito la tabella è inaccedibile anche da php.
Stai usando transazioni? dove può verificarsi un rollback magari dopo 
che hai preso alcuni dati e quindi un risultato lo hai alla prima 
esecuzione?
 
-- 
Z.

$res = executeQuery($sql);
 
Secondo me piu' che una tabella temporanea, che poi devi preoccuparti di 
cancellare, sarebbe meglio una view 
 

 
Non ci sono transazioni...
 
Ripensando al discorso che hai fatto sugli utenti DB, non vorrei aver preso una cantonata: durante l'esecizione del codice, prima che la tabella venga eliminata è normale che accedendo con phpmyadmin non veda la tabella creata?