Newsgroup: it.comp.www.php
Titolo: Strano problema con campo AUTO_INCREMENT e mancata creazione tabella in database

Allora sto cercando di creare un database e di crearvi al suo interno
un paio di tabelle, ma mi blocco gia alla prima tabella con il seguente
errore 1049 : Unknown database 'listino'
Cerco di spiegarmi meglio e scusate per il codice schifoso ma sto solo
abbozzando delle idee
ho una pagina admin.php che si trova in una cartella admin, in radice
ho il mio solito index.php
file admin.php
<html>
<head><title>Pagina Amministrazione Listino</title></head>
<body>
<?php
$nomedatabase = "listino";
include "../common_db.inc"; // file che dopo spiego
error_reporting(0);
$link_id = db_connect($nomedatabase); // la funzione presente nel file
common_db.inc
// ora abbiamo 3 possibilità, la funzione restituisce 2 se non esiste
il database con il nome riportato nella funzione
// la funzione restituisce 1 se non è stato passato nessun valore alla
funzione
// la funzione restituisce 0 se i parametri di connessione all'host
sono sbagliati
// altrimenti restituisce un puntatore valido al database
if ($link_id <= '1') die(sql_error());
  else  if ($link_id == '2') {
        echo "meglio creare il database '$nomedatabase' prima di
lavorarci, non credi ?<BR>";
        // da qui procederemo richiamando la funzione creadatabase
presente in common_db.inc
		$databasecreato = creadatabase($nomedatabase);
		}else{
        echo "Connesso con successo al database in $dbhost.
$link_id<BR>";
        }
?>
</body>
</html>
File common_db.inc
<?php
// Script che si occupa di controllare o meno l'esistenza dei database
citati in basso
$dbhost='localhost'; // nome dell'host dove si trova il nostro database
SQL
$dbusername='root'; // nome utente accesso database
$dbuserpassword='password'; // password accesso database
// $default_dbname= 'mysql'; // nome standard per il database in caso
non ne esistano altri
//Inizializziamo le variabili di segnalazione errore
$MYSQL_ERRNO = '';
$MYSQL_ERROR = '';
// per prima cosa inizializziamo la nostra funzione per la connessione
al server che ci fornirà eventualmente
// l'errore che non ha permesso la sua corretta inizializzazione
function db_connect($dbname){
	global $dbhost, $dbusername, $dbuserpassword, $default_dbname; //
dichiariamo le variabili globali
	global $MYSQL_ERRNO, $MYSQL_ERROR;
	  $link_id = mysql_connect($dbhost, $dbusername,$dbuserpassword); //
creiamo una connessione con il database
	  if (!$link_id){
		$MYSQL_ERRNO = 0;
		$MYSQL_ERROR = "Connessione fallita all'host $dbhost."; // viene
visualizzato un errore impossibilità connettersi
		//al database
		return 0;
	    }
	    Else if(empty($dbname)){ //se il nome passato alla funzione è
vuoto restituisce 1
	         $MYSQL_ERRNO = mysql_errno();
             $MYSQL_ERROR = mysql_error();
	         return 1;
	         }
	         else if(!empty($dbname) && !mysql_select_db($dbname)) { // se
il database non esiste restituisce 2
	              $MYSQL_ERRNO = mysql_errno();
		          $MYSQL_ERROR = mysql_error();
		          return 2;
	              }
	else return $link_id;  // altrimenti restituisce un puntatore
}
// funzione che restituisce l' errore relativo al database
function sql_error() {
	global $MYSQL_ERRNO, $MYSQL_ERROR;
	if(empty($MYSQL_ERRNO)){
	    $MYSQL_ERRNO = mysql_errno();
		$MYSQL_ERROR = mysql_error();	// altro errore generico
	}
	if(empty($MYSQL_ERROR)){
	    $MYSQL_ERRNO = mysql_errno();
		$MYSQL_ERROR = "Non hai specificato il nome del database !";
	}
	return "$MYSQL_ERRNO : $MYSQL_ERROR";
}
// funzione che si occupa di creare lo scheletro del database del
listino
function creadatabase($dbname){
  global $dbhost, $dbusername, $dbuserpassword, $default_dbname; //
dichiariamo le variabili globali
  // creazione tabella LISTINI
  // INIZIO
  $listini_tablename = 'listini'; // definizione nome tabella
  $listini_table_def = "id_annomese MEDIUMINT(10) NOT NULL
AUTO_INCREMENT, ";  //definizione array valori
  $listini_table_def .= "annomese VARCHAR(14) NOT NULL";
  $listini_table_def .= "PRIMARY KEY (id_annomese)";  // nota che
l'ultimo non ha la virgola finale
  // FINE LISTINI
  if(!mysql_query("CREATE DATABASE $dbname")) die (sql_error());
  echo "Creato con successo nell' $dbhost il database $dbname<BR>";
  if(!mysql_select_db($dbname)) die (sql_error());
///////////////// QUI GENERA L'ERRORE
//////////////////////////////////////////////////////////
  if (!mysql_query("CREATE TABLE $listini_tablename
($listini_table_def)")) die (sql_error());
/////////////////////////////////////////////////////////////////////////////////////////////////////
  echo "Creato con successo nell'database $dbname la tabella
$listini_tablename<BR>";
  return 0;
}
?>
Se tolgo la voce AUTO_INCREMENT l'errore sparisce e la tabella viene
creata correttamente, dove sbaglio ??? Non riesco a capirlo e ogni
vostro suggerimento mi sarà utlissimo, grazie in anticipo.

 ($listini_table_def)")) die (sql_error());
Prova a visualizzare il comando della query per la creazione della 
tabella, con tutte quelle concatenazioni potresti aver perso qualche 
carattere (o meglio, non č facile valutare la query)
Ad occhio l'errore potrebbe essere lě:
annomese VARCHAR(14) NOT NULLPRIMARY KEY (id_annomese)
	Francesco

 ($listini_table_def)")) die (sql_error());


l'ultimo non ha la virgola finale
Fra NOT NULL e PRIMARY KEY manca uno spazio o sbaglio?
Inoltre, se hai un campo AUTO_INCREMENT, la primary key e' gia'
quella, no? Dovresti avere PRIMARY KEY, senza id_annomese:
$listini_table_def = <<<DEFINITION
	id_annomese MEDIUMINT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
	annomese VARCHAR(14) NOT NULL
DEFINITION;
Per prova:
mysql> CREATE TABLE prova (
    -> id_annomese MEDIUMINT(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    -> annomese VARCHAR(14) NOT NULL
    -> );
Query OK, 0 rows affected (0.01 sec)
Leonardo
-- 
Dawn is near, the time is short (Human aircraft! Hard to port!)
We eight reindeers of the night work as one in silent flight.
Let not one damn house pass by (Who taught that guy how to fly?)
Each year sees more girls and boys: how many of them can we bring toys?

Grazie a tutti per le risposte, grazie al consiglio di un grande
esperto ho trovato l'errore dovuto come sempre alla mia sbadataggine,
la riga incriminata è questa
$listini_table_def .= "annomese VARCHAR(14) NOT NULL";
manca la , finale
Grazie a tutti per i consigli