Visualizzazione risultati 1 fino 6 di 6

Discussione: creare tabelle con mysql_escape_string

  1. #1
    Guest

    Predefinito creare tabelle con mysql_escape_string

    Devo creare delle tabelle con nomi che potrebbero contenere degli apici.

    Facendolo direttamente da PhpMyAdmin nessun problema.
    Sapete spiegarmi perchè il codice seguente mi dà errore?

    [ php ]


    $db = mysql_connect("localhost", "root") or die("errore" . mysql_error());
    mysql_select_db("my_imcamo",$db);

    $tabella="D'Annunzio";
    $tabella=mysql_escape_string($tabella);

    $sql = mysql_query("CREATE TABLE $tabella (`nd` int( 3 ) not NULL default '0') TYPE = MYISAM;",$db);
    if (!$sql) echo "<p align=left>c'è stato un errore tecnico; segnala al webmaster il messaggio seguente: <br>".$_SERVER['PHP_SELF']." ".__LINE__."<br>";

    [ /php ]


    Ho pensato di sostituire $tabella=mysql_escape_string($tabella) con $tabella=md5($tabella), ma non è il massimo della vita.

  2. #2
    Guest

    Predefinito

    Io posso consigliarti di sostituire l'apice con un altro carattere, ad esempio l'underscore (_). Così eviti anche eventuali future incompatibilità (come è stato per esempio con le accentate).


    Ciaooo!!!

  3. #3
    L'avatar di heracleum
    heracleum non è connesso Utente storico
    Data registrazione
    21-01-2004
    Messaggi
    3,333

    Predefinito

    Il consiglio di Debug è senza dubbio il più saggio.
    Oltretutto, almeno per quel che mi immagino, mysql_escape_string lo usi appunto (il nome stesso lo dice "string") quando in una query vuoi assicurarti che caratteri come l'apice saranno correttamente "escapati" o "becslesciati" ( \' al posto di ' ) ma questo all'interno di espressioni STRINGA.
    Non so se mi sono spiegato, cioè usi:

    $str = mysql_escape_string($str);

    quando il valore di $str sarà comunque piazzato all'interno di apici per esprimere valori stringa nella query, quindi:

    $query = "SELECT * FROM nometabella WHERE campo='$str' AND ...";

    vedi? il valore di $str va a finire tra apici e mysql_escape_string assicura che nel valore non ci siano apici che possano chiudere anzitempo la stringa creando un errore di sintassi sql.

    Detto questo, secondo me non ha senso mysql_escape_string per il nome di una tabella, perché è un nome e non una stringa.
    Poi possiamo anche investigare...
    magari utilizzando quegli apicetti diagonali (che phpmyadmin usa sempre per evitare conflitti con le keyword sql) vediamo... ma non sarei tanto speranzoso.
    Quindi così al volo convertirei in underscore _ come detto prima.
    Avvertimento: richiedere in privato questioni tecniche produrrà inevitabilmente una supercazzola prematurata come risposta. (5 served)

  4. #4
    Guest

    Predefinito

    si, ero giunto anch'io a questa conclusione. Il fatto è che il nome della tabella coincide con un cognome, e nei cognomi a volte l'apostrofo c'è. Però ho deciso di imporre l'eliminazione di caratteri pericolosi all'utente, altrimenti tutto il codice dovrebbe essere fatto con estrema attenzione e questo mi complica troppo la vita.

    Comunque grazie lo stesso.
    Ultima cosa: sono corretti i tag che ho usato per racchiudere il codice nel messaggio? (in altri messaggi mi ero preso delle sgridate)
    Ultima modifica di imcamo : 17-07-2006 alle ore 20.51.17

  5. #5
    Guest

    Predefinito

    Potresti "risolvere" creando una tabella (se non esiste già) per gli utenti dove dedichi un campo al nome della tabella corrispondente.
    Per esempio, per l'utente Gabriele d'Annunzio:

    id=1; nome="Gabriele"; cognome="d'Annunzio"; tabella="d_annunzio";

    e a questo punto puoi gestirti i nomi delle tabelle (degli utenti) come meglio preferisci (anche con codici numerici univoci).


    Ciaoooo!!!!!!

  6. #6
    Guest

    Predefinito

    hai ragione. Semplice ed efficace

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •