Problema inserimento stringa con apostrofo in database sql

radioButton

Utente Attivo
26 Dic 2013
35
0
6
Arezzo
Ciao,
premetto che tra le discussioni c'è già qualcosa di simile al problema che voglio porre ma siccome non c'ho capito molto vorrei spiegare ciò che ho da risolvere.
Ho creato un form che invia dei dati ad un database sql.
Tutto funziona correttamente tranne quando invio stringhe che presentino un'apostrofo (la query non viene eseguita e mi arriva il messaggio di fallita esecuzione query).
Esiste una maniera per fare in modo che ciò non accada?
Devo scrivere una procedura che sostituisca l'eventuale presenza di apostrofo con doppia apostrofo o c'è una maniera + immediata per risolvere il problema?
Grazie a tutti coloro che avranno avuto la pazienza di leggermi.
 
Devi assicurarti di inserire un backlash dietro ogni apostro, la query risultante dovrà essere -ad esempio- così:
Codice:
UPDATE table SET column = 'Ce l\'ho fatta' WHERE clause = 1

In generale consiglio di utilizzare i prepared statements per ovviare al problema.
 
Devi assicurarti di inserire un backlash dietro ogni apostro, la query risultante dovrà essere -ad esempio- così:
Codice:
UPDATE table SET column = 'Ce l\'ho fatta' WHERE clause = 1

In generale consiglio di utilizzare i prepared statements per ovviare al problema.

Ciao, grazie per la tua risposta.
Devo ammettere però che non ho capito il tuo suggerimento, mi spiego meglio:
Supponiamo che io sia un generico utente che deve compilare un form di iscrizione ad un sito.
Nel campo 'cognome' scrivo il mio cognome che per esempio è " D'Alessio".
Ecco, in questo caso, quando invio, il database non esegue la query perchè c'è un'apostrofo.
Chiaramente io utente non posso sapere che se scrivessi " D''Alessio " tutto funzionerebbe
però immagino che ci sarà pur una maniera per fare in modo che nell'input di un form
si possa scrivere una parola con un'apostrofo...
Tu mi stai suggerendo forse che devo scrivere la query in una maniera particolare?
Mi scuso sin da ora se mi hai detto una cosa lapalissiana che non riesco a cogliere.
 
Prendendo in prestito il tuo esempio, devi far si che D'Alessio diventi D\'Alessio prima di passare il dato alla query.
Ci sono diversi modi per ottenere ciò, che linguaggio di scripting utilizzi ?
 
Prendendo in prestito il tuo esempio, devi far si che D'Alessio diventi D\'Alessio prima di passare il dato alla query.
Ci sono diversi modi per ottenere ciò, che linguaggio di scripting utilizzi ?

Uso JQuery; in pratica mi suggerisci di scansionare quel particolare input prima che il suo valore venga inviato al database e di sostituire " ' " con " \' " ?
 
Pardon, intendevo lato server.
Comunque si, il suggerimento è quello. Se usi PHP per esempio esiste una pratica funzione che si chiama addslashes() adatta allo scopo.
 
Pardon, intendevo lato server.
Comunque si, il suggerimento è quello. Se usi PHP per esempio esiste una pratica funzione che si chiama addslashes() adatta allo scopo.

No scusa ero io che avevo capito male.... si uso PHP ed il tuo consiglio penso mi sarà molto utile.

Potrei per esempio impostare la cosa così:

PHP:
$cognome=$_POST['nameInput'];
$cognome=addslashes($cognome);

e poi impostare la query.

Ti ringrazio, come al solito mi togli le castagne da fuoco flame!

Avrei anche da fare un paio di domande sulla capacità di calcolo dei database,
la posso fare direttamente qua o devo aprire una nuova discussione?

Per il momento chiudo rinnovando i miei ringraziamenti, domani mattina provo a mettere in pratica i tuoi suggerimenti.

Grazie.
 
Ultima modifica di un moderatore:
Pardon, intendevo lato server.
Comunque si, il suggerimento è quello. Se usi PHP per esempio esiste una pratica funzione che si chiama addslashes() adatta allo scopo.

Stamani ho provato a risolvere il mio problema con addslashes() ma la cosa non funzionava allora ho pensato, a partire dal concetto che tu mi hai suggerito, di far precedere un apice ad ogni eventuale
apice presente nella stringa. Ho usato str_replace(); in pratica:

PHP:
$nome= $_POST['name'];
$nome=str_replace($nome, " ' ", " '' ");

tutto ora sembra funzionare.
 
Ultima modifica di un moderatore:
Si, va bene anche in quel modo l'escape della stringa.
Per l'altro quesito invece è meglio aprire un altro topic ;)
 
ciao
....o devo aprire una nuova discussione?
un'altra, un problema = una discussione

p.s.
perchè con addslashes non funziona?

verifica bene quello che hai fatto
prova questo scriptino
PHP:
<?php
$variabile="Pinco D'Asdrubale";
echo "<pre>";
var_dump($variabile);
$variabile=addslashes($variabile);//aggiunge lo slash
var_dump($variabile);
$variabile=stripslashes($variabile);//toglie lo slash
var_dump($variabile);
echo "</pre>";
?>
 
Ultima modifica:
ciao

un'altra, un problema = una discussione

p.s.
perchè con addslashes non funziona?

verifica bene quello che hai fatto
prova questo scriptino
PHP:
<?php
$variabile="Pinco D'Asdrubale";
echo "<pre>";
var_dump($variabile);
$variabile=addslashes($variabile);//aggiunge lo slash
var_dump($variabile);
$variabile=stripslashes($variabile);//toglie lo slash
var_dump($variabile);
echo "</pre>";
?>

Ciao,
non so spiegarmi il perchè, ti posso però dire che se nell'input cognome del form scrivo per esempio D\'Asdrubale mi da errore mentre se scrivo D''Asdrubale tutto fila liscio.
E' per questo che ho pensato di usare la doppia apostrofo.
 
ciao
intanto perche nel campo di input devi scrivere D\'Asdrubale? non vedo la ragione che un utente debba scivere in quel modo,
comunque se hai paura che un utente metta lo slash

PHP:
$variabile=addslashes(stripslashes($variabile));

cioè prima togli se c'è e poi l'aggiungi

p.s.
non riportare con quete il post, porta via solo spazio
 
No Borgo Italia, probabilmente mi sto spiegando male;
se un utente si vuole per esempio registrare e nel form scrive " D'Asdrubale " la query non viene eseguita perchè il database sql si incasina con l'apostrofo.
Se io faccio in modo di inviare al server la variabile modificata con l'aggiunta di \ sembra non funzionare lo stesso (forse proprio perchè il database è sql come mi ha giustamente domandato FlameSeeker).
Se invece faccio in modo che in presenza di apice ne venga aggiunto un altro (e questo lo faccio a livello di scripting lato server ossia php) tutto è ok, come ho avuto modo di riscontrare.
 
SQL, Structured Query Language, indica la sintassi standardizzata con cui formuli una query qualsiasi (SELECT, DELETE, UPDATE etc).
Chi legge questo linguaggio è un software e ce ne sono di diversi allo scopo, come ad esempio MySql, PostgreSql, SQLite, SQL SERVER e altri ancora.

Non riesci ad identificare, di preciso, il software che stai utilizzando?

Sicuramente hai risolto e quindi va benone per te, ma come dice borgo è giusto per la curiosità di capire come mai una soluzione standard come quella suggerita in principio non funzioni, tutto qui.
 
Ciao

per postgresql, goglando, ho trovato che ha le stesse sequanze di escape di mysql

per Microsoft JDBC Driver per SQL Server supporta l'utilizzo di sequenze di escape SQL, in base a quanto definito dall'API JDBC. come postgresql

L’unico un po’ diverso è sqlite, da manuale php:
La funzione addslashes() NON dovrebbe essere utilizzata per inserire i caratteri di escape nelle query SQLite; questa porta a strani risultati quando si recuperano i dati

quindi, salvo che non usi sqlite, non capisco perche non funzioni
 
Chiedo venia e scusa ad entrambi, con tutte ste sigle mi sono incasinato.
Il database è MsSql, forse questo spiega l'arcano?
 
per essere ancora più espliciti le query le chiamo come segue:

sqlsrv_query($this->conn, $query);

non è sql questo? Perdonatemi ma con tutte ste sigle mi perdo...
 
ciao
se è MsSql addslashes dovrebbe funzionare.
comunque un dubbio

PHP:
sqlsrv_query($this->conn, $query);
è una funzione, cosa contiene?
 
Ultima modifica:

Discussioni simili