Mysql
 sql >> Database >  >> RDS >> Mysql

Quando esco da tutto l'input, a volte lascia barre (\) nella stringa e la inserisce nel database. Perché succede e come posso risolverlo?

Hai ragione.
Le cose delle virgolette magiche non hanno nulla a che fare con le cose di sql e non dovrebbero essere collegate ad esse.
Perché le citazioni magiche sono un problema a livello di sito e l'escape di sql è solo un problema correlato a sql.

Quindi, hanno bisogno di un trattamento diverso e non dovrebbero mai essere usati insieme.

Devi sbarazzarti delle virgolette magiche incondizionatamente, perché rovina non solo le cose SQL ma ogni manipolazione dei dati del tuo sito.

Quindi, sarebbe saggio inserire del codice stripslash in qualsiasi file di bootstrap da eseguire su ogni chiamata dello script. Il codice lo puoi trovare in numerose implementazioni di tale codice, basta cercare su Google la funzione 'stripslashes_deep'.

Sarebbe saggio che questo codice fosse sempre eseguito (ovviamente sotto la condizione di controllo get_magic_quotes_gpc()) nonostante lo stato attuale delle virgolette magiche, solo per motivi di compatibilità.

Ma c'è un'altra possibilità per disattivarli:prova a creare un file php.ini nella radice della tua applicazione.

Tuttavia, c'è un grave errore nel tuo codice. In effetti, non protegge nulla.
Stai evadendo da $memberid e $postid ma non citarli! . Pertanto, non c'è alcuna protezione. Solo perché l'escape funziona solo se usato con le citazioni.

Per favore, ricorda:

Evadere non è sinonimo di sicurezza!

Fuggire da soli non può aiutare a nulla. C'è tutta una serie di regole da seguire.

Ho scritto una spiegazione decente di recente, quindi non mi ripeterei:Sostituzione delle funzioni mysql_* con PDO e istruzioni preparate