473,508 Members | 2,475 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Tough question on database NULLs.

Suppose you have a textBox control. It is empty and you send the
this.textBox1.Text.ToString() value into a database. The control does
not send a NULL but instead a "".

What is the _CORRECT_ way (e.g. the way the C# language designers at MS
would do it) to handle this situation. I know you could just test for
a "" and then have code that would insert a NULL value like this:

if (this.textBox1.Text.ToString() == '')
{
//pseudo code ! I know you should use parameters!
insert into tableFOO(NULL);

}else
{
insert into tableFOO(this.textBox1.Text.ToString();

}

Jul 10 '06 #1
24 1339
Hello Karen,

What you don't like in this code?

PS: use == String.Empty in lue of == ''

KHSuppose you have a textBox control. It is empty and you send the
KHthis.textBox1.Text.ToString() value into a database. The control
KHdoes not send a NULL but instead a "".
KH>
KHWhat is the _CORRECT_ way (e.g. the way the C# language designers at
KHMS would do it) to handle this situation. I know you could just
KHtest for a "" and then have code that would insert a NULL value
KHlike this:
KH>
KHif (this.textBox1.Text.ToString() == '')
KH{
KH//pseudo code ! I know you should use parameters!
KHinsert into tableFOO(NULL);
KH}else
KH{
KHinsert into tableFOO(this.textBox1.Text.ToString();
KH}
KH>
---
WBR,
Michael Nemtsev :: blog: http://spaces.msn.com/laflour

"At times one remains faithful to a cause only because its opponents do not
cease to be insipid." (c) Friedrich Nietzsche
Jul 10 '06 #2

Michael Nemtsev wrote:
Hello Karen,

What you don't like in this code?

PS: use == String.Empty in lue of == ''

I think that if textBox.Text has not been assigned a value, it should
be NULL!

So in theory these two should be equal _if_ textBox.Text has not been
assigned a value!

insert into tableFOO ( this.textBox.Text.ToString());

should be equal to :

insert into tableFOO ( null );

Jul 10 '06 #3

"Karen Hill" <ka**********@yahoo.comwrote in message
news:11**********************@75g2000cwc.googlegro ups.com...
Suppose you have a textBox control. It is empty and you send the
this.textBox1.Text.ToString() value into a database. The control does
not send a NULL but instead a "".

What is the _CORRECT_ way (e.g. the way the C# language designers at MS
would do it) to handle this situation. I know you could just test for
a "" and then have code that would insert a NULL value like this:

if (this.textBox1.Text.ToString() == '')
{
//pseudo code ! I know you should use parameters!
insert into tableFOO(NULL);

}else
{
insert into tableFOO(this.textBox1.Text.ToString();

}
Well, where we work, we have methods on a utility class that perform the
checks...

public static void TrimColumn(DataRow Row, DataColumn Column)
{
if (!Row.IsNull(Column) && Row[Column].ToString() == string.Empty &&
Column.AllowDBNull) {
Row[Column] = DBNull.Value;
}
}

or something to that effect...then we can use our typed datasets to trim our
columns:

in our ui layer:

Row.LastName = txtLastName.Text;

in our business logic layer:

TrimColumn(Row, Row.TypedTable.LastNameColumn);

Note, we use a custom data set generator that generates a TypedTable
property as well as typed columns. You would need to modify the above code
(which is not our code directly, just typed off top of my head) to
suit...such as passing the column name instead of the actual column.

HTH,
Mythran

Jul 10 '06 #4
Michael Nemtsev <ne*****@msn.comwrote:
PS: use == String.Empty in lue of == ''
That's very much a matter of taste - I find == "" to be easier to read
than == String.Empty, personally. Another alternative (but one I'm not
as fond of) is

if (someTextExpression.Length==0)

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Jul 10 '06 #5
"Karen Hill" <ka**********@yahoo.comwrote in message news:11**********************@m73g2000cwd.googlegr oups.com...
I think that if textBox.Text has not been assigned a value, it should
be NULL!
The thing is - since a textbox represents a string - it must be able to represent ALL forms of a string. This includes the empty
string (length = 0). NULL is not a form of a string.
So in theory these two should be equal _if_ textBox.Text has not been
assigned a value!

insert into tableFOO ( this.textBox.Text.ToString());

should be equal to :

insert into tableFOO ( null );

Jul 10 '06 #6
"Michael Nemtsev" <ne*****@msn.comwrote in message
news:17***************************@msnews.microsof t.com...
PS: use == String.Empty in lue of == ''
I've heard this recommendation before. What is its rationale?

///ark
Jul 10 '06 #7
Hello Jon Skeet [C# MVP],
>PS: use == String.Empty in lue of == ''
JThat's very much a matter of taste - I find == "" to be easier to
Jread than == String.Empty, personally. Another alternative (but one
JI'm not as fond of) is
Jif (someTextExpression.Length==0)

I find String.Empty is more unique, who knows how empty string could be represented
:) maybe empty string on MacOs is not an "" at all.
String.Empty just encapsulates this.

---
WBR,
Michael Nemtsev :: blog: http://spaces.msn.com/laflour

"At times one remains faithful to a cause only because its opponents do not
cease to be insipid." (c) Friedrich Nietzsche
Jul 10 '06 #8
Karen,

The best way, in my opinion, is to use what the framework already offers
you.

When you create the binding to the TextBox (or to any property on any
control), use the FormattingEnabled and the NullValue property to indicate
what value should return null to you.

Assuming you have the binding, you would do this:

// The binding.
Binding binding = <some code to get binding>;

// Enable formatting, this is what allows the binding to handle nulls.
binding.FormattingEnabled = true;

// Set the NullValue to a value that is to be interpreted as null:
binding.NullValue = "";

You have to make sure that you set the NullValue property to "", as it
is null by default (and the textbox always uses the empty string, not null,
to represent empty text).

Once you do that, you will notice that your property will be set to null
(if it is a reference type), or to DbNull (if it is a value type).

If you need a specific value type to be assigned to your property when
the textbox is null (like say, a SqlInt which is null), then you can set the
DataSourceNullValue on the Binding instance to the value that the property
on the data source should be set to.

Use what's in the framework, it's your friend. =) This way is much,
much cleaner.

Hope this helps.
--
- Nicholas Paldino [.NET/C# MVP]
- mv*@spam.guard.caspershouse.com

"Karen Hill" <ka**********@yahoo.comwrote in message
news:11**********************@75g2000cwc.googlegro ups.com...
Suppose you have a textBox control. It is empty and you send the
this.textBox1.Text.ToString() value into a database. The control does
not send a NULL but instead a "".

What is the _CORRECT_ way (e.g. the way the C# language designers at MS
would do it) to handle this situation. I know you could just test for
a "" and then have code that would insert a NULL value like this:

if (this.textBox1.Text.ToString() == '')
{
//pseudo code ! I know you should use parameters!
insert into tableFOO(NULL);

}else
{
insert into tableFOO(this.textBox1.Text.ToString();

}

Jul 10 '06 #9
* Mythran wrote, On 10-7-2006 20:11:
>
"Karen Hill" <ka**********@yahoo.comwrote in message
news:11**********************@75g2000cwc.googlegro ups.com...
>Suppose you have a textBox control. It is empty and you send the
this.textBox1.Text.ToString() value into a database. The control does
not send a NULL but instead a "".

What is the _CORRECT_ way (e.g. the way the C# language designers at MS
would do it) to handle this situation. I know you could just test for
a "" and then have code that would insert a NULL value like this:

if (this.textBox1.Text.ToString() == '')
{
//pseudo code ! I know you should use parameters!
insert into tableFOO(NULL);

}else
{
insert into tableFOO(this.textBox1.Text.ToString();

}

Well, where we work, we have methods on a utility class that perform the
checks...

public static void TrimColumn(DataRow Row, DataColumn Column)
{
if (!Row.IsNull(Column) && Row[Column].ToString() == string.Empty &&
Column.AllowDBNull) {
Row[Column] = DBNull.Value;
}
}

or something to that effect...then we can use our typed datasets to trim
our columns:

in our ui layer:

Row.LastName = txtLastName.Text;

in our business logic layer:

TrimColumn(Row, Row.TypedTable.LastNameColumn);
I've seen people using something very similar, with a few small changes:

public static void SetColumnValue(DataRow Row, DataColumn Column, string
value)
{
if (value == string.Empty &&
Column.AllowDBNull) {
Row[Column] = DBNull.Value;
}
else
{
Row[Column] = value;
}
}

This makes assignments even better, or at least shorter :)

SetColumnValue(Row, Row.TypedTable.LastNameColumn, txtLastName.Text);

I've also seen customers with a little change in the Enterprise Library
that does this check in the low level storage code. There's even a line
in the OracleDatabase class which is commented out, but does this by
default. This is due to the fact that Oracle handles strings differently
by default.

Jesse
Jul 10 '06 #10

Karen Hill wrote:
Michael Nemtsev wrote:
Hello Karen,

What you don't like in this code?

PS: use == String.Empty in lue of == ''

I think that if textBox.Text has not been assigned a value, it should
be NULL!
This is a matter of interpretation. That is to say, this depends upon
your application, and it depends upon what "text box not filled in"
means in your problem domain.

In some domains, for some programs, leaving a text box blank quite
clearly means "this value is a blank string." For example, if I ask the
user to enter a report title and they leave the text box blank, I could
interpret that as the user saying, "Here is your title: it's a blank
string."

In other cases, leaving a text box blank quite clearly means
"information not supplied." For example, if I prompt for a customer
name and the user leaves the text box blank, it's reasonable to say
that an empty string is not a valid customer name and so the user
declined to enter that information.

In the first case, the user IS entering a value... it just happens to
be a blank value. In the second case the user is declining to enter a
value. Which is meant by leaving a text box blank isn't something that
can be decided globally: you have to decide on a case-by-case basis.

For those cases in which a blank text box means "information not
supplied," what you're really talking about is where should the code be
that mediates between the UI (text box) and the business layer (which
should also have a null). If you're using bindings, you should probably
have a custom binding that maps a blank text box to a null in the
business layer. If you are mediating between the controls on the screen
and your internal business (or data) objects in open code, then there's
nothing wrong with what you wrote.

Jul 10 '06 #11
"Michael Nemtsev" <ne*****@msn.comwrote in message
news:17***************************@msnews.microsof t.com...
>
I find String.Empty is more unique, who knows how empty string could be
represented :) maybe empty string on MacOs is not an "" at all.
"" is an empty string. That just comes from the definition of "" and the
definition of "empty". It's not a representation issue, as "" does not
specify a reprensentation.

Do you also recommend using Decimal.Zero?

Finally, one thing can't be "more unique" than another thing.

(I'm sure there is a good use for String.Empty and Decimal.Zero - probably
having to do with a situation where you want to use a field rather than a
literal - I just don't think it's a good idea for all cases.)

///ark
Jul 10 '06 #12
"Karen Hill" <ka**********@yahoo.comwrote:
Suppose you have a textBox control.
There's the problem right there. A TextBox doesn't have any way to
distinguish between "" and null. There's no way of representing the
user's decision to leave the box untouched versus actually entering an
empty value.

One can take up an angle using the same reasoning as online web forms
with Javascript validation: they take the value "" as being "not
filled". That implies that where a not-null constraint exists in the
underlying data model, the validation considers "" as null. As a result,
different idioms have arisen to represent null: "na" for postcodes in
countries which don't have postcodes, for example.

-- Barry

--
http://barrkel.blogspot.com/
Jul 10 '06 #13
Michael Nemtsev <ne*****@msn.comwrote:
I find String.Empty is more unique, who knows how empty string could
be represented : maybe empty string on MacOs is not an "" at all.
String.Empty just encapsulates this.
As Mark says, how could it be anything else? "" is a literal with no
characters in it - how could there be any other type of empty string?
What else could "" represent? I guess you *could* have a zero-width
Unicode character in your source code - but in that case I think there
are big problems afoot.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Jul 10 '06 #14
When a function is JIT compiled, the compiler 'interns' all the strings in
it and uses a single instance of each unique hard coded string for that
function. Empty strings are replace for string.Empty at this point. The
reason string.Empty exists is because string is a reference type, it saves
memory only having one copy of an empty string object in memory.

Ciaran
There are 10 types of people in this world, those that understand binary,
and those that don't.

"Mark Wilden" <Ma********@newsgroups.nospamwrote in message
news:u%****************@TK2MSFTNGP04.phx.gbl...
"Michael Nemtsev" <ne*****@msn.comwrote in message
news:17***************************@msnews.microsof t.com...
>PS: use == String.Empty in lue of == ''

I've heard this recommendation before. What is its rationale?

///ark

Jul 10 '06 #15
"Ciaran" <ci****@theodonnells.plus.comwrote in message
news:44**********************@ptn-nntp-reader01.plus.net...
When a function is JIT compiled, the compiler 'interns' all the strings in
it and uses a single instance of each unique hard coded string for that
function. Empty strings are replace for string.Empty at this point. The
reason string.Empty exists is because string is a reference type, it saves
memory only having one copy of an empty string object in memory.
I don't understand, I'm afraid. Since string lterals are interned, isn't
there only one copy of an empty string in memory anyway?
Jul 10 '06 #16
"Mark Wilden" <Ma********@newsgroups.nospamwrote:
"Ciaran" <ci****@theodonnells.plus.comwrote in message
news:44**********************@ptn-nntp-reader01.plus.net...
When a function is JIT compiled, the compiler 'interns' all the strings in
it and uses a single instance of each unique hard coded string for that
function. Empty strings are replace for string.Empty at this point. The
reason string.Empty exists is because string is a reference type, it saves
memory only having one copy of an empty string object in memory.

I don't understand, I'm afraid. Since string lterals are interned, isn't
there only one copy of an empty string in memory anyway?
There can be more than one empty string in memory, but you have to go to
some lengths (typically a StringBuilder) to get an instance of one. If
you use string's overloaded '==' operator, you end up with a value
comparison rather than a reference comparison, so normally one would
never notice the difference.

---8<---
using System;
using System.Text;

class App
{
static void Main()
{
StringBuilder sb = new StringBuilder();
string s = sb.ToString();
Console.WriteLine(object.ReferenceEquals(s, string.Empty));
Console.WriteLine(s == "");
Console.WriteLine(string.IsNullOrEmpty(s));
}
}
--->8---

Prints:

---8<---
False
True
True
--->8---

-- Barry

--
http://barrkel.blogspot.com/
Jul 10 '06 #17
Barry Kelly <ba***********@gmail.comwrote:
When a function is JIT compiled, the compiler 'interns' all the
strings in it and uses a single instance of each unique hard
coded string for that function. Empty strings are replace for
string.Empty at this point. The reason string.Empty exists is
because string is a reference type, it saves memory only having
one copy of an empty string object in memory.
I don't understand, I'm afraid. Since string lterals are interned, isn't
there only one copy of an empty string in memory anyway?

There can be more than one empty string in memory, but you have to go to
some lengths (typically a StringBuilder) to get an instance of one. If
you use string's overloaded '==' operator, you end up with a value
comparison rather than a reference comparison, so normally one would
never notice the difference.
And to get back to Mark's point, if you use "" everywhere in your code,
that will still only be one object - so using String.Empty wouldn't buy
you anything.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Jul 11 '06 #18
You know, I agree that String.Empty could hardly be smth else then just
"".
I think it's more matter of one's habit.
However, as for me, String.Empty is more conventient way to show empty
string for one reason - you needn't to peer at it to find out whether
it empty string or apostrophe (') withing the "". It's very easy to
miss ' in that case when u review code.

Jon wrote:
Michael Nemtsev <ne*****@msn.comwrote:
I find String.Empty is more unique, who knows how empty string could
be represented : maybe empty string on MacOs is not an "" at all.
String.Empty just encapsulates this.

As Mark says, how could it be anything else? "" is a literal with no
characters in it - how could there be any other type of empty string?
What else could "" represent? I guess you *could* have a zero-width
Unicode character in your source code - but in that case I think there
are big problems afoot.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
Jul 11 '06 #19
"Michael Nemtsev" <ne*****@msn.comwrote in message
news:11**********************@m73g2000cwd.googlegr oups.com...
you needn't to peer at it to find out whether
it empty string or apostrophe (') withing the "". It's very easy to
miss ' in that case when u review code.
True - I'll give you that!

///ark
Jul 11 '06 #20

Mark Wilden wrote:
Do you also recommend using Decimal.Zero?
Of course - and when at some point down the line the value of zero
changes, all those fools who embedded magic numbers in their code will
be sorry! :)

--
Larry Lard
Replies to group please
When starting a new topic, please mention which version of VB/C# you
are using

Jul 11 '06 #21

"Jon Skeet [C# MVP]" <sk***@pobox.comwrote in message
news:MP************************@msnews.microsoft.c om...
Barry Kelly <ba***********@gmail.comwrote:
When a function is JIT compiled, the compiler 'interns' all the
strings in it and uses a single instance of each unique hard
coded string for that function. Empty strings are replace for
string.Empty at this point. The reason string.Empty exists is
because string is a reference type, it saves memory only having
one copy of an empty string object in memory.

I don't understand, I'm afraid. Since string lterals are interned,
isn't
there only one copy of an empty string in memory anyway?

There can be more than one empty string in memory, but you have to go to
some lengths (typically a StringBuilder) to get an instance of one. If
you use string's overloaded '==' operator, you end up with a value
comparison rather than a reference comparison, so normally one would
never notice the difference.

And to get back to Mark's point, if you use "" everywhere in your code,
that will still only be one object - so using String.Empty wouldn't buy
you anything.

--
Jon Skeet - <sk***@pobox.com>
http://www.pobox.com/~skeet Blog: http://www.msmvps.com/jon.skeet
If replying to the group, please do not mail me too
It would. If you don't like seeing literals in your code (in-line) then it
would buy you the satisfaction of using a non-literal without defining your
own constants :P

Mythran

Jul 11 '06 #22
I've seen people using something very similar, with a few small changes:

public static void SetColumnValue(DataRow Row, DataColumn Column, string
value)
{
if (value == string.Empty &&
Column.AllowDBNull) {
Row[Column] = DBNull.Value;
}
else
{
Row[Column] = value;
}
}

This makes assignments even better, or at least shorter :)

SetColumnValue(Row, Row.TypedTable.LastNameColumn, txtLastName.Text);

I've also seen customers with a little change in the Enterprise Library
that does this check in the low level storage code. There's even a line in
the OracleDatabase class which is commented out, but does this by default.
This is due to the fact that Oracle handles strings differently by
default.

Jesse
Yeah, on the UI side..but we do it on the BLL side because you may not have
complete control over what is calling the BLL (such as multiple-UI's,
web-services, etc.). Massaging/Validating the data in the BLL is the BLL's
job (it is business logic to massage or validate data anyways).

Mythran

Jul 11 '06 #23
"Jon Skeet [C# MVP]" <sk***@pobox.comwrote in message
And to get back to Mark's point, if you use "" everywhere in your code,
that will still only be one object - so using String.Empty wouldn't buy
you anything.

It would. If you don't like seeing literals in your code (in-line) then it
would buy you the satisfaction of using a non-literal without defining your
own constants :P

Mythran
Oh, dear. That brings back bad memories from my C years. What C
programmer didn't run across nonsense like this while doing
maintenance:

if (items_remaining == ONE)
{
cost += TWO_POINT_FIVE;
}
else
{
cost += POINT_FIVE;
}

etc.

No, I'm not joking. Not only did I see crap like this, but the guy who
wrote it fiercly defended it, claiming that his code was more readable
because it contained "no literals". Ugh. I wonder whether String.Empty
isn't just more of the same.

Jul 11 '06 #24
>
Oh, dear. That brings back bad memories from my C years. What C
programmer didn't run across nonsense like this while doing
maintenance:

if (items_remaining == ONE)
{
cost += TWO_POINT_FIVE;
}
else
{
cost += POINT_FIVE;
}

etc.

No, I'm not joking. Not only did I see crap like this, but the guy who
wrote it fiercly defended it, claiming that his code was more readable
because it contained "no literals". Ugh. I wonder whether String.Empty
isn't just more of the same.
Oh yeah, that's where I got it from :) Ole C/C++ days :)

and if I wrote the a similar sample you wrote above, you can shoot me ...

Another reply in this thread makes more sense than what I wrote...using
string.Empty is a whole lot easier to see and comprehend than "" and "'".
You can easily mistake "'" for "" and "" for "'" when skimming through code
and trying to track down errors. So, using string.Empty for "" and "'" or
''' for the apostrophe character, does help ... a little ;)

Now, there are times to use literals in code...when you KNOW that the value
will NEVER be different ... even for testing purposes. I'm not one to
defend it with all my heart though, as I use literals in my code ... but I
try not too.

Mythran

Jul 11 '06 #25

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

3
1710
by: Thomas Coleman | last post by:
I have been playing around with 2.0 and I'm trying clarify a few things about generics and data access. I was hoping to be able to do something like this with nullable types: int? foo = null; ...
3
1472
by: JackO | last post by:
I have a text box on a form “txtExamDate” that I know contains nothing. I am trying to test code that will determine the text box is nothing. I am getting the error because there is no value...
3
1302
by: Simon | last post by:
Hi all, Do you think the best way to avoid the problems of nulls in the database is just to provide default values via the db schema? Alternatively, is it better to allow nulls, seeing as the...
2
15860
by: Rey | last post by:
Howdy all. My problem deals w/inserting nulls into database (SQL Svr 2K) for the datetime fields activityDate and followUpDate where nulls are allowed. >From the web form, the user can type...
14
1889
by: tshad | last post by:
I have people telling me that I should set up objects for my tables, but I am finding the Null problem makes that difficult. It isn't a big problem if you are not updating the table, but if you...
4
2262
by: chambersdon | last post by:
I have an application that needs to insert nulls into the database and I don't seem to be able to do this. I am currently trying to do this with a Typed DataSet but I can't seem to Insert Nulls...
8
6512
by: markjerz | last post by:
Hi, I basically have two tables with the same structure. One is an archive of the other (backup). I want to essentially insert the data in to the other. I use: INSERT INTO table ( column,...
8
3670
by: DaFrizzler | last post by:
Hi, I have received the following email from a colleague, and am quite frankly baffled by the idea. I am just wondering if anyone has any advice or suggestions about this???? === BEGIN MAIL...
0
1168
by: jehugaleahsa | last post by:
Try this instead: // T - the type you are attempting to retrieve. // o - the data that you want to turn into a T T get<T>(object o) { // handle nulls - turns Nullables into null, reference...
0
7231
marktang
by: marktang | last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
0
7133
by: Hystou | last post by:
Most computers default to English, but sometimes we require a different language, especially when relocating. Forgot to request a specific language before your computer shipped? No problem! You can...
1
7066
by: Hystou | last post by:
Overview: Windows 11 and 10 have less user interface control over operating system update behaviour than previous versions of Windows. In Windows 11 and 10, there is no way to turn off the Windows...
0
7504
tracyyun
by: tracyyun | last post by:
Dear forum friends, With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each...
1
5059
isladogs
by: isladogs | last post by:
The next Access Europe User Group meeting will be on Wednesday 1 May 2024 starting at 18:00 UK time (6PM UTC+1) and finishing by 19:30 (7.30PM). In this session, we are pleased to welcome a new...
0
4724
by: conductexam | last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and...
0
3214
by: TSSRALBI | last post by:
Hello I'm a network technician in training and I need your help. I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs. The...
0
3198
by: adsilva | last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
1
773
muto222
by: muto222 | last post by:
How can i add a mobile payment intergratation into php mysql website.

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.