Passato qualche tempo a risolvere un problema per cui un'applicazione web PHP/MySQL aveva problemi di connessione al database. Si poteva accedere al database dalla shell e phpMyAdmin con le stesse identiche credenziali e non aveva senso.
Si scopre che la password ha avuto un $ segno in esso:
$_DB["password"] = "mypas$word";
La password viene inviato è stato "mypas", che è ovviamente sbagliato.
Qual è il modo migliore per gestire questo problema? Sono sfuggito a $ con un \
e ha funzionato.
Generalmente uso $string = 'test'
per le stringhe che è probabilmente il modo in cui ho evitato di eseguirlo prima.
È corretto questo comportamento? Che cosa succede se questa password è stata memorizzata in un database e PHP l'ha estratta - si sarebbe verificato lo stesso problema? Che cosa mi manca qui ...
Grazie per la risposta. Sembra che questo sia un problema di buone pratiche. Con la segnalazione di errori severi, questo potrebbe essere stato raccolto più velocemente. Dalla mia domanda iniziale - questo potrebbe essere un problema quando prendi le password dal database, o PHP sfuggirà al segno $? – ncatnow
@ncatnow: non può essere un problema perché le sostituzioni vengono eseguite solo in stringhe doppie tra virgolette ("stringa"). Quando leggi una stringa dal database viene letta internamente da PHP, quindi non stai usando le stringhe doppie tra virgolette per impostarlo (o anche le virgolette singole). Immagina che il compilatore sostituisca tutte le cose $ ** subito prima ** impostando la variabile. –
È solo un problema per le stringhe scritte direttamente nel codice sorgente, usando virgolette doppie. Devono apparire fisicamente "" come $ questo "' in un file di origine '.php'. Le stringhe dal database, da un file, dall'utente, ecc. Non sono soggette a interpolazione. –