Strano errore in una query mysql da php

konqueror

Nuovo Utente
20 Mag 2011
7
0
0
Salve a tutti!
Sto facendo un semplice file d'installazione che prende dei dati per un db e lo popola.
Ecco una parte del codice
PHP:
<?php if (isset($_POST['userdb']) and isset($_POST['passdb']) and isset($_POST['host']) and isset($_POST['nomedb']) and isset($_POST['username']) and isset($_POST['password'])  ):
$hostname = $_POST['host'];
$userdb = $_POST['userdb'];
$passdb = $_POST['passdb'];
$database = $_POST['nomedb'];
$user = $_POST['username'];
$pass = $_POST['password'];
Qui prendo i dati da un form ed è tutto ok.
Poi creo una variabile per la futura query:
PHP:
$popolamentodb = "
DROP DATABASE IF EXISTS '$database';
CREATE DATABASE '$database';
USE '$database';


CREATE TABLE IF NOT EXISTS commenti(
idcommento INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
id INT NOT NULL,
user VARCHAR(55) NOT NULL,
email VARCHAR(55) NOT NULL,
data DATE NOT NULL,
commento TEXT NOT NULL,
approvato TINYINT(1) NOT NULL
);
";
Ovviamente la query è corretta perchè da phpmyadmin l'ho eseguita con successo più volte, ho controllato e non ci sono errori.
Ma dal browser ricevo questo errore:
Codice:
Errore nella query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''dbprova'; CREATE DATABASE 'dbprova'; USE 'dbprova'; CREATE TABLE IF NOT EXIST' at line 1
Sembra che l'unica istruzione accettata sia la prima, poi mi da sempre errori di troncamento. Perchè mi da errore di sintassi se la query è giusta?
Perchè questo troncamento?
Sapete come posso risolvere il tutto?
Grazie mille
 
Alessandro ho fatto come dici tu.
Ho spezzettato la query in 8 parti (poichè sono 8 interrogazioni) ma il risultato è sempre lo stesso, mi da questo errore.
Errore nella query: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'database' at line 1

Qui parte del codice con le 3 query iniziali:
PHP:
$dropdb = "DROP DATABASE IF EXISTS $database";
$createdb = "CREATE DATABASE $database";
$usedb = "USE $database";

PHP:
if(mysql_query($dropdb)) {
		echo "Database popolato con successo!";
} else {
	exit('<p>Errore nella query: ' . mysql_error() . '</p>');
}
if(mysql_query($createdb)) {
		echo "Database popolato con successo!";
} else {
	exit('<p>Errore nella query: ' . mysql_error() . '</p>');
}

Boh...continuo a non capire :(
 
Prova ad usare gli apici propri dell'SQL. Modifica così:
PHP:
$dropdb = "DROP DATABASE IF EXISTS `$database`"; 
$createdb = "CREATE DATABASE `$database`"; 
$usedb = "USE `$database`";
E così via per tutti i nomi di campi, tabelle e database.
 
Grazie per la risposta!
Però ho appena scoperto che per effettuare query multiple bisogna utilizzare l'oggetto MYSQLI presente in php, da attivare l'estensione in php.ini.

Purtroppo ho problemi anche li ma sarà opportuno aprire un altro thred per saparare le cose.
Ti ringrazio :)
 
[risolto]

Ho trovato la soluzione ai miei problemi a questo link:
http://www.w3schools.com/php/php_mysql_create.asp

In sostanza il trattamento di query come la creazione di tabelle o la creazione del db è differente, ci sono dei piccoli accorgimenti da usare prima di lanciare le query.
In quell'articolo è spiegato tutto per bene e molto semplicemente.

Grazie ancora!
 

Discussioni simili