Ho usato le istruzioni standard mysql_connect(), mysql_query(), ecc per fare cose MySQL da PHP. Ultimamente sto passando ad usare la meravigliosa classe MDB2. Insieme a questo, sto usando le istruzioni preparate, quindi non devo preoccuparmi di sfuggire al mio input e agli attacchi di SQL injection.Stringa vuota nella colonna non nullo in MySQL?
Tuttavia, c'è un problema che sto incontrando. Ho una tabella con alcune colonne VARCHAR, che sono specificate come not-null (cioè, non consentono valori NULL). Utilizzando i comandi vecchio MySQL PHP, ho potuto fare cose come questa senza alcun problema:
INSERT INTO mytable SET somevarchar = '';
Ora, però, se ho una domanda come:
INSERT INTO mytable SET somevarchar = ?;
E poi in PHP che ho:
$value = "";
$prepared = $db->prepare($query, array('text'));
$result = $prepared->execute($value);
Questo getterà l'errore "null value violates not-null constraint
"
Come soluzione temporanea, I c diamine se $value
è vuoto, e cambialo su " "
(un singolo spazio), ma è un trucco orribile e potrebbe causare altri problemi.
Come dovrei inserire stringhe vuote con istruzioni preparate, senza provare a inserire un NULL?
EDIT: E 'troppo grande di un progetto di passare attraverso il mio intero codebase, trovare ovunque che utilizza una stringa vuota "" e cambiare in modo da utilizzare al posto NULL. Quello che devo sapere è perché le query standard di MySQL considerano "" e NULL come due cose separate (come penso sia corretto), ma le istruzioni preparate convergono "" in NULL.
Nota che "" e NULL sono non la stessa cosa. Ad esempio, SELECT NULL = "";
restituisce NULL
anziché 1
come previsto.
Se si inserisce "", che è fondamentalmente nulla, perché non cambiare il campo nel db per consentire null. – UnkwnTech
è "fondamentalmente nulla" nello stesso modo in cui 0 è "fondamentalmente" falso. sono simili ma in realtà abbastanza diversi. – nickf
NULL significa "nessun valore" no, "stringa vuota" – warren