Buongiorno,


scusate se scrivo qui, ma è una domanda che non riguarda esplicitamente i database. Penso di non aver mai usato:
codice:
 
try {
	echo "OK\n";
} catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
...e vorrei capire se sono sulla strada giusta.
Nei giorni scorsi ho aperto qualche altra discussione sul forum, ma faccio comunque un riassunto del codice completo che posto di seguito:


1) mi connetto al database;
2) verifico se è presente la tabella che mi interessa. Se non c'è la creo prelevandola da un file .sql, mentre se c'è la svuoto con TRUNCATE;
3) leggo un file .csv;
4) carico nella tabella sopra citata, tutti i dati del file .csv;


codice:
		require_once 'dbconfig.php';


		try {


			$connection = new PDO("mysql:host=$hostname;dbname=$database", $username, $password);
			$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);


			print_r("<pre align='center' ><font color='".$array_colori['msg_OK']."'><b>"."Connessione al database '".$database."' riuscita"."</b></font>\r\n"."</pre>");


			$tbl_consuntivo_user = "tbl_consuntivo_".$_COOKIE['utente'];
			
			$array_tbl = array();
			$allTable = $connection->query('SHOW TABLES', PDO::FETCH_NUM);
			foreach($allTable->fetch() as $database=>$tableName) {
				array_push($array_tbl, $tableName);
			}
			
			if (in_array($tbl_consuntivo_user, $array_tbl)) {
				// svuoto la tabella che già esiste
				$connection->beginTransaction();
				$svuota_tbl = $connection->prepare('TRUNCATE TABLE '.$tbl_consuntivo_user);
				$svuota_result = $svuota_tbl->execute();
				print_r("<pre align='center'><font color='".$array_colori['msg_OK']."'><b>"."La tabella '".$tbl_consuntivo_user."' è gia presente ed è stata svuotata"."</b></font>\r\n"."</pre>");
			} else {
				// creo la nuova tabella
				$sql_new_tbl = file_get_contents($path_sql.'tbl_consuntivo.sql');
				$sql_new_tbl = str_replace("tbl_consuntivo", $tbl_consuntivo_user, $sql_new_tbl);
				$crea_tbl = $connection->prepare($sql_new_tbl);
				$crea_result = $crea_tbl->execute();
				print_r("<pre align='center'><font color='".$array_colori['msg_OK']."'><b>"."La nuova tabella '".$tbl_consuntivo_user."' è stata creata"."</b></font>\r\n"."</pre>");
			}
			


			$file = fopen($cartella_report_ADV.$nome_file_new, "r");
			$rigo = 1;
			while (($column = fgetcsv($file, 100000, ";")) !== FALSE) {
				if ($rigo > 1) {
					
					$operatore = $column[1];
					$cognome_ut = $column[2];
					$nome_ut = $column[3];
					$cf = $column[4];
					$comune = $column[5];
					$attivita = $column[6];
					$ds = $column[8];
					$pianificazione = $column[9]."/".$column[10]."/".$column[11];
					$registrazione = $column[13]."/".$column[14]."/".$column[15]."/".$column[16];
					$durata_effettiva = $column[17];
					
					$statement = $connection->prepare('INSERT INTO '.$tbl_consuntivo_user.' (
																								operatore, 
																								cognome_ut, 
																								nome_ut,
																								cf, 
																								comune, 
																								attivita,
																								ds, 
																								pianificazione, 
																								registrazione, 
																								durata_effettiva
																							) VALUES (
																								"'.$operatore.'", 
																								"'.$cognome_ut.'", 
																								"'.$nome_ut.'",
																								"'.$cf.'", 
																								"'.$comune.'", 
																								"'.$attivita.'",
																								"'.$ds.'", 
																								"'.$pianificazione.'",
																								"'.$registrazione.'", 
																								"'.$durata_effettiva.'"
																							)'
																						);
					$statement->execute();
				}
				$rigo ++;


			}
			


			
			
			print_r("<pre align='center'><font color='".$array_colori['msg_OK']."'><b>"."Sono state trovate '".($rigo - 1)."' pianificazioni"."</b></font>\r\n"."</pre>");
		
			
			
				
		} catch (PDOException $e) {
			
			print_r ("<pre align='center'><font color='".$array_colori['msg_ERRORE']."'><b>"."ERRORE: Connessione al database '".$database."' non riuscita"."<b></font>\r\n"."</pre>");
			die ("Could not connect to the database ".$database." :" . $e->getMessage());


		}

Diciamo che funziona 'quasi' tutto.
Sto avendo problemi solo con l'inserimento dei dati nella tabella, perché probabilmente vengono eseguite troppe query contemporaneamente (avevo usato un altro metodo che veniva sconsigliato per l'inserimento di tanti record, ma funzionava). Comunque il messaggio di errore è questo:
codice:
Could not connect to the database 0 :SQLSTATE[HY000]: General error: 2014 Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

Da questo errore sembrerebbe che la connessione non sia riuscita, invece non è così!
Ho capito che ogni errore che viene trovato, viene riportato in questa parte di codice:
codice:
catch (PDOException $e) {
	print_r ("<pre align='center'><font color='".$array_colori['msg_ERRORE']."'><b>"."ERRORE: Connessione al database '".$database."' non riuscita"."<b></font>\r\n"."</pre>");
	die ("Could not connect to the database ".$database." :" . $e->getMessage());
}
Me ne sono accorto già in questo punto, perché all'inizio nel database non era presente nessuna tabella e foreach mi dava un errore riportandolo sempre nel codice che ho appena postato:
codice:
$array_tbl = array();
$allTable = $connection->query('SHOW TABLES', PDO::FETCH_NUM);
foreach($allTable->fetch() as $database=>$tableName) {
	array_push($array_tbl, $tableName);
}
Vorrei capire cosa sbaglio. Se per esempio dopo aver verificato la connessione io debba uscire e non continuare ad inserire tutto il restante codice in 'try'.


Grazie