Waarde NULL is niet NULL in tabel

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Marco V

Marco V

10/02/2011 21:17:56
Quote Anchor link
Ik voeg met onderstaande een regel toe aan een tabel:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?php
$afbeelding
= $afbeeldinglocatie.$safe_filename;
$banner = NULL;

// De INSERT opdracht voor afbeeldingen in tabel PROJECTAFBEELDINGEN
$Opdracht = "INSERT INTO PROJECTAFBEELDINGEN SET        
ID = '0',
BANNER = '"
.mysql_real_escape_string($banner)."',
IMG = '"
.mysql_real_escape_string($afbeelding)."'
"
;
?>


Als ik daarna een select query op de tabel doe dan blijkt, in bovenstaand geval, BANNER toch niet NULL te zijn waardoor ik onverwacht toch resultaat heb met niks!
De velden IMG en BANNER zijn beide VARCHAR(250) UTF8_bin NULL default NULL

De query: "SELECT BANNER, TITEL, LINK FROM PROJECTAFBEELDINGEN WHERE PROJECTID = '".mysql_real_escape_string($PROJECT['ID'])."' AND BANNER IS NOT NULL"

Wat zie ik over het hoofd?
 
PHP hulp

PHP hulp

05/11/2024 13:31:36
 
Noppes Homeland

Noppes Homeland

10/02/2011 21:22:09
Quote Anchor link
als je in een veld niets wild invullen dan laat je het veld weg of je verteld ook daadwerkelijk dat je niets bedoeld.

En gebruik standaard sql, daar heb je meer plezier aan.

Dus:
INSERT INTO tabel (a,b) VALUES (1,NULL);
UPDATE tabel SET b = NULL WHERE a = 1;

En nu maar hopen dat je in de gaten hebt wat je fout doet.
 
Marco V

Marco V

10/02/2011 21:30:39
Quote Anchor link
ehm... ik geloof dat ik het nog niet in de gaten heb :-) maar luie programmeur als ik ben wil ik met een query meerdere dingen kunnen die soms toch niet nodig zijn. Kortom, ik vraag me af waarom de waarde NULL toch niet NULL in de tabel wordt?

Vanzelfsprekend zijn er meerdere wegen naar ehm... mysql
 
Aad B

Aad B

10/02/2011 21:43:52
Quote Anchor link
De waarde wordt toch niet NULL omdat JIJ er iets invult. Een lege string zoals '' is heel iets anders dan NULL en dat is expected behaviour. NULL is alleen NULL als NULL op staat :)
Gewijzigd op 10/02/2011 21:53:13 door Aad B
 
Thomas de vries

thomas de vries

10/02/2011 21:45:30
Quote Anchor link
Srry verkeerde post
in verkeerde webpagina
Gewijzigd op 10/02/2011 21:47:22 door thomas de vries
 
Marco V

Marco V

10/02/2011 21:49:38
Quote Anchor link
Wat noppes uitlegde is opzich helder, probleem is opgelost, maar ik ben toch nog benieuwd naar de theorie... als ik de waarde NULL aan een variabele geef en vervolgens een INSERT doe met die variabele (met waarde NULL) dan ziet mysql dat dus niet als NULL, maar als ehm... "niets" als waarde en dat wordt dus niet NULL in de db?

Toevoeging op 10/02/2011 21:51:49:

@Aad.. dat is wat ik bedoelde en wilde weten!

Dank voor jullie reacties!
 
Aad B

Aad B

10/02/2011 21:52:44
Quote Anchor link
Wat doet '".mysql_real_escape_string($banner)."' met de PHP constante NULL en is het resultaat daarvan compatible met de MySQL NULL?
 
Kris Peeters

Kris Peeters

11/02/2011 09:23:57
Quote Anchor link
Zoals je al uit de naam van de functie kan afleiden, geeft mysql_real_escape_string een string terug, niet NULL. NULL is geen string.

Komt nog bij, als je NULL in een SQL string wil zetten, mag die niet tussen aanhalingstekens (' of ") staan.

Als je PDO gebruikt, met prepared statements, wordt dit probleem opgevangen.
Bij PDO zet je geen ' of " in de SQL string.
bv.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$sql
= "
INSERT INTO berichten
  (nickname, tekst, tijd, ip)
VALUES
  (:nickname, :tekst, :tijd, :ip);"
;
?>


Daarna bind je variabelen aan die :nickname, :tekst, ...
En je bent nog eens automatisch beschermd tegen injection.


O ja, voor ik het vergeet (Edit: maar ik lees net dat het al ergens is gezegd):
ik merk op dat je een misse syntax gebruikt voor INSERT.
Je gebruikt INSERT zoals je UPDATE moet gebruiken.
Gewijzigd op 11/02/2011 09:55:28 door Kris Peeters
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.