Aangelus (Normal User)
Pro
Messaggi: 143
Iscritto: 29/03/2011
|
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
Codice sorgente - presumibilmente Php |
$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 ??
|
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
Come puoi vedere qui http://stackoverflow.com/a/18184652, 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:
Codice sorgente - presumibilmente Php |
$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 http://stackoverflow.com/a/12710285, 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".
|
|
Aangelus (Normal User)
Pro
Messaggi: 143
Iscritto: 29/03/2011
|
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
|
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
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
Codice sorgente - presumibilmente Plain Text |
$query = "CREATE TABLE `" . $Nome . "` ( ".
//eccetera
|
l'ho anche testato, spero di non aver dimenticato/sbagliato niente stavolta
|
|
Aangelus (Normal User)
Pro
Messaggi: 143
Iscritto: 29/03/2011
|
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 ))
|
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
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).
|
|
HeDo (Founder Member)
Guru^2
Messaggi: 2765
Iscritto: 21/09/2007
|
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.
|
|
GN (Member)
Guru
Messaggi: 772
Iscritto: 30/04/2011
|
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 |
|
Aangelus (Normal User)
Pro
Messaggi: 143
Iscritto: 29/03/2011
|
Ciao ragazzi quello è una porzione di codice semplificato che userò come scheletro per un tipo totalmente diverso dagli utenti, per abitudine semplifico tutto il più possibile , ho preso il consiglio come elemento di studio.
nel continuare i miei test è sorto sempre sullo stesso codice un ulteriore problema :/ sarebbero parole con l'apostrofo
Ultima modifica effettuata da Aangelus il 12/02/2015 alle 1:49 |
|