Newsgroup: it.comp.www.php
Titolo: Tre righe di codice che non vanno

Non riesco ad inserire il valore null in una tabella.
test e' una tabella composta da un solo campo chiamato "valore", di tipo 
varchar, lunghezza 10 e valore predefinito null.
Se faccio cosi' :
   $valore = 'mario';
   $buffer="INSERT INTO test (valore) VALUES (\"$valore\")";
   $coda = mysql_query ($buffer, $link);
la stringa "mario" viene inserita.
Se invece scrivo:
   $valore = null;
   $buffer="INSERT INTO test (valore) VALUES (\"$valore\")";
   $coda = mysql_query ($buffer, $link);
mi inserisce un campo blank ma non null.
Solo scrivendo la query in questo modo
   $buffer="INSERT INTO test (valore) VALUES (null)";
inserisce il valore null.
Dove sbaglio ?   Come faccio ad assegnare il valore null ad una variabile ?
Grazie.
S

 variabile ?
Non sbagli nulla. Semplicemente null e` un valore speciale per il 
database, e puoi inserirlo solo come qui sopra.
PHP non sa che stai per scrivere quella stringa in un DB, quindi non sa 
convertire il suo null nel null del DB, e per non sbagliare lo trasforma 
in una stringa vuota.
Bye.

 Bye.
Grazie.
Ciao.
S 

 Che significano ?
In generale significano che quello e` un identificatore (una variabile, 
per esempio).
MySQL e` "lasco" e te le lascia usare, a meno che non attivi la modalita` 
strict, al posto delle singole, ma se cambi DB ti tocca rivedere tutto il 
codice.
Bye.

 mi inserisce un campo blank ma non null.
E' un tipico problema di Type Juggling.
<pre>
<?php 
$valore = null;
$buffer = "INSERT INTO test (valore) VALUES (\"$valore\")";
print($buffer);
print("\r\n");
$valore = 'null';
$buffer = "INSERT INTO test (valore) VALUES (\"$valore\")";
print($buffer);
print("\r\n");
$valore = null;
var_dump($valore);
$valore = null;
var_dump((string)$valore);
$valore = 'null';
var_dump((string)$valore);
print("\r\n");
?>
</pre>
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/


Irrisolvibile a quanto pare.
Non riuscirai mai ad assegnare il valore null alla variabile e a caricarlo 
nel database come null.

Stefano ha scritto:

Stai confondendo il null di PHP da quello di MySQL.
E' sufficiente che invece di scrivere:
$valore = null;
scrivi:
$valore = 'null';



Ma cosi' facendo inserisci in mysql la stringa 'null' non il valore null.


 null.
$valore = 'null';
$buffer = "INSERT INTO test (valore) VALUES (\"$valore\")";
print($buffer);
Esegui la stringa SQL restituita dal precedente print() e poi ne
riparliamo.


Ho eseguito questo:
   $valore = 'null';
   $buffer = "INSERT INTO test (valore) VALUES (\"$valore\")";
   $coda = mysql_query ($buffer, $link);
Vado a vedermi il contenuto della tabella test con phpmyadmin e ci trovo, 
come ovvio, la stringa null NON il valore null.

Stefano ha scritto:

A me funziona perfettamente:
<?php 
mysql_connect('localhost', 'root', '');
mysql_select_db('test');
mysql_query('CREATE TABLE test (valore varchar(255))');
$valore = 'null';
$buffer = "INSERT INTO test (valore) VALUES (\"$valore\")";
mysql_query ($buffer);
?>
Sei sicuro che il campo possa accettare null come valore?



A me no e non capisco perche' . Ok, ultimo tentativo.
Stavolta la tabella la creo dal codice come hai fatto te, invece che con 
phpmyadmin, e la chiamo test1. Poi ci inserisco prima la stringa "ciao", 
quindi il valore null (quello vero) ed infine il valore null associato ad 
una variabile come mi hai suggerito. Quindi stampo tutto e vediamo cosa 
esce:
   mysql_query('CREATE TABLE test1 (valore varchar(255))');
   $buffer = "INSERT INTO test1 (valore) VALUES (\"ciao\")";  // Primo 
inserimento: la stringa ciao
   $coda = mysql_query ($buffer, $link);
   $buffer = "INSERT INTO test1 (valore) VALUES (null)";       // Secondo 
inserimento: il valore null.
   $coda = mysql_query ($buffer, $link);
   $valore = 'null';
   $buffer = "INSERT INTO test1 (valore) VALUES (\"$valore\")";   // Terzo 
inserimento: il contenuto della variabile $valore.
   $coda = mysql_query ($buffer, $link);
   $buffer = "SELECT * from test1";
   $coda = mysql_query ($buffer, $link);
   while ($row=mysql_fetch_assoc($coda)){
    echo "Valore = ".$row['valore']."<br>";
   }
Questo e' il printout:
Valore = ciao
Valore =
Valore = null
Quindi il secondo inserimento e' proprio null mentre il terzo e' una 
stringa, come dicevo io.
Ciao.
S 

 riparliamo.
così inserisci davvero la stringa "null". Devi comporre la query senza
apici, in modo che mysql consideri la parola 'NULL' come
identificativo:
$buffer = "INSERT INTO test (valore) VALUES ($valore)";
bye!

> $buffer = "INSERT INTO test (valore) VALUES ($valore)";
Ok, cosi' funziona.
Grazie.
S

 cosě inserisci davvero la stringa "null". 
Hai ragione, vedi il mio 
6d2a0a...@mid.individual.net
.


 stringa, come dicevo io.
Hai ragione, ho postato la query di prova sbagliata per errore. Il
problema rimane comunque il Type Juggling ed il fatto che hai confuso
il null di PHP con quello di MySQL.
Per creare una query che imposta il campo a NULL DEVI utilizzare una
variabile PHP tipo stringa contenente 'null' e NON utilizzare gli apici
per racchiuderla nella query:
$valore = 'null';
$buffer = "INSERT INTO test (valore) VALUES ($valore)";
oppure
$valore = 'null';
$buffer = 'INSERT INTO test (valore) VALUES (' . $valore . ')';
Questo non funziona a causa del Type Juggling (#1136 - Column count
doesn't match value count at row 1):
$valore = null;
$buffer = "INSERT INTO test (valore) VALUES ($valore)";


Risolto, grazie.