Oppure

Loading
10/02/15 16:54
Aangelus
Salve ragazzi quest'oggi mi si è presentato un problema con la creazione delle tabelle, cioè quando un nome utente è una parola intera tutto funziona benissimo, il problema insorge qualora è suddivisa in 2 o più parti. Di seguito posto il codice e relativo errore
$query = 'CREATE TABLE ' . $Nome . ' ( '.
'ID INT NOT NULL AUTO_INCREMENT, '.
'Hobby varchar(30) NOT NULL, '.
'Sport varchar(30) NOT NULL, '.
'descrizione di se varchar(400) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, '.
'PRIMARY KEY(ID))';

errore:
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 'bueno ( ID INT NOT NULL AUTO_INCREMENT, Hobby varchar(30) NOT NULL, Sport varc' at line 1

il nome in questo caso era el bueno
suggerimenti ??
aaa
10/02/15 19:10
GN
Come puoi vedere qui stackoverflow.com/a/…, se il nome di una tabella contiene spazi bisogna racchiuderlo tra apici; dato che nel tuo codice li usi come delimitatori della stringa, probabilmente dovrai sostituire questi ultimi con le virgolette. Quindi io farei:
$query = "CREATE TABLE '" . $Nome . "' ( ".
"ID INT NOT NULL AUTO_INCREMENT, ".
"Hobby varchar(30) NOT NULL, ".
"Sport varchar(30) NOT NULL, ".
"descrizione di se varchar(400) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, ".
"PRIMARY KEY(ID))";


Comunque, mi pare strana la struttura di database che stai implementando... di solito non si fanno tabelle per ogni utente ma una tabella per tutti gli utenti.
In ogni caso, il codice lasciato così può essere vulnerabile ad attacchi SQL injection quindi è consigliabile implememtare una qualche strategia di protezione, ci sono varie discussioni in merito; a mio parere il modo più semplice è l'utilizzo della forma esadecimale della stringa con le funzioni bin2hex() di php e UNHEX() di mysql, come spiegato in questa risposta stackoverflow.com/a/…, in ogni caso ti consiglio di documentarti perchè esistono anche altri metodi (quella discussione di Stackoverflow secondo me è un'ottima fonte) come ad esempio quello dei prepared statements che forse è anche più "elegante".
aaa
10/02/15 19:24
Aangelus
ti ringrazio per gli ulteriori consigli ;)

ho eseguito dei test ma ancora niente
solito problema
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 ''el bandito' ( ID INT NOT NULL AUTO_INCREMENT, Hobby varchar(30) NOT NULL, Sport' at line 1
aaa
10/02/15 20:39
GN
Scusa è colpa mia, ho fatto un errore stupidissimo, ho confuso l'apice normale (') con quello all'indietro, sempre che si chiami così (`), che è quello corretto come puoi vedere nella risposta alla discussione di Stackoverflow che ti ho linkato prima. Il codice corretto dovrebbe essere
$query = "CREATE TABLE `" . $Nome . "` ( ".
//eccetera

l'ho anche testato, spero di non aver dimenticato/sbagliato niente stavolta
aaa
10/02/15 21:01
Aangelus
gn ti ringrazio molto e voglio cogliere l'occasione per farti sapere che ti ammiro come persona (anche se non ti conosco di persona) è stato molto piacevole leggere i tuoi consigli e le soluzioni, a volte ci si imbatte in commenti scortesi perdendo l'obbiettivo che si prefigge un forum
GRAZIE :)))
aaa
10/02/15 21:30
GN
Di nulla ;), comunque se il codice che stai scrivendo non è un semplice test ma andrà in un vero sito/applicazione web ti consiglio di approfondire il discorso della protezione da potenziali attacchi SQL injection (vedi post di prima).
aaa
11/02/15 8:21
HeDo
1) Non si moltiplicano le tabelle per gli utenti
2) Quella sintassi è totalmente vulnerabile ad attacchi sql injection

Cambia la strada che stai prendendo o quello che hai appena realizzato non vedrà mai la luce, e se lo farà sarà più pericoloso che maneggiare un tizzone ardente.
aaa
11/02/15 18:55
GN
Postato originariamente da HeDo:

1) Non si moltiplicano le tabelle per gli utenti
2) Quella sintassi è totalmente vulnerabile ad attacchi sql injection

Non per criticare ma se leggi sopra gli avevo già fatto notare entrambe le cose
aaa