1 接收时,不管是什么类型,一律为string类型.
详细可以用var_dump($_POST);来测试
2 表单中没有该name的话,会有NOTICE提示.该值为 NULL
表单为空时,该值是字符串,也为空.
3 mysql还是会自动转换的.
对于int类型,不需要加引号.
如果字段属于varchar,你插入int类型的值时可以不加引号,但是如果插入的是字符串的话,不加引号,会出错.
mysql如果字段默认为NULL,如果插入时没有这个字段,这个值就为NULL. 如果插入时有这个字段,按照字段最终的值为主.
插入时是啥值就是啥值.4 3已经提到了.int值插入varchar字段类型时,不加引号可以,默认是给转换的.但是varchar值插入int,哪肯定是提示错误的.PHP本来就是弱类型语言,所以如果类型确定,根据程序需要,可以进行强制转换.但其实强制转换的时候很少.
详细可以用var_dump($_POST);来测试
2 表单中没有该name的话,会有NOTICE提示.该值为 NULL
表单为空时,该值是字符串,也为空.
3 mysql还是会自动转换的.
对于int类型,不需要加引号.
如果字段属于varchar,你插入int类型的值时可以不加引号,但是如果插入的是字符串的话,不加引号,会出错.
mysql如果字段默认为NULL,如果插入时没有这个字段,这个值就为NULL. 如果插入时有这个字段,按照字段最终的值为主.
插入时是啥值就是啥值.4 3已经提到了.int值插入varchar字段类型时,不加引号可以,默认是给转换的.但是varchar值插入int,哪肯定是提示错误的.PHP本来就是弱类型语言,所以如果类型确定,根据程序需要,可以进行强制转换.但其实强制转换的时候很少.
text为 "变量"
int为变量如果没有值插入
在insert into table(字段1,字段2....)的字段名不写,就默认了null如果要写字段名,又没有值插入,那就自定义一个值放在那里啊
比如,text "0"
int 0这样sql语句就不会出错了哦
还有就是
不管是POST还是get方式接的值,除数字意外的字符,是string,数字你可以自己变换的
我插入时,发现这么个问题:
如果将一个字符串放入int ,会不会出错? 比如: '12345' 如果 将一个''放入int ,会不会出错?如果我这个字段插入时声明了,但值为变量,变量为空,即,,型的,是否会出错?如果我将一个int 放入字符型,如text 或varchar,会不会出错
没有问题。
2 int类型的字段只能插入数字。数字加上引号如上所示,只是兼容的写法。
3 变量为空无所谓,但是如果不符合字段类型,是不允许的。
4 不会,哪怕不加引号都无所谓。其实你说的问题,我在第一楼都已经回答了。
以下是我的测试结果,不正大家有没有遇到这种情况1 我将'12345' 插入int 时的,错误提示超出范围
2 int 字段,插入''时出错,插入0正确,插入'0'没试过
3 变量为空时,在sql的表现就是 insert into tbl (int_f,field2,string_f) values (5,,'aaa') 出错,原因,,为空
4 没试过
看你的数据库字段是什么类型的,另外你的SQL语句要符合MySQL的语法就可以了,
另外据库中的整型常量和PHP中的整型常量不是一回事。
$id = 1;
$sql = "select * from tbl where id = " . $id;
这个时候会有类型转换!
而
$sql = "select * from tbl where id = " . $_POST['id'];
不会有PHP的类型转换!还有你的超出范围问题是MySQL报错的吧,是的话说明你的数据库字段类型可能是tinyint或者smallint
整型呢?要不要加引号?在sql中,加''与不加''有何区别?事实上,如果sql中的用的是变量,它只会替代变量的值,并不能告诉sql这是一个字符串或是整型或是日期
1 是不会出错的,除非你的int字段类型为int(2)这种,本身已经超界.
insert table (id, name, xxxx) values ('$id', '$name', 'xxx');
insert table (id, name, xxxx) values ($id, '$name', 'xxx');
insert table (id, name, xxxx) values ($id, $name, 'xxx');
insert table (id, name, xxxx) values ($id, , 'xxx');
其中id为int(11), $name为varchar(255)
a 在这种情况下, 只要id没有超出本身int字段的范围,前两种写法都是正确的.
b 如果$name的值为int类型, 则第三种写法也是正确的.但这种写法不是很严密.
c 第四种情况无论如何,都是不正确的.因为这不是正确的sql语法
就算你在c或者c++等变量定义十分严密的情况下,只要是标准的sql语句就能执行成功.换句话来说,无论你是什么类型, 其实mysql在执行的时候都当做一个字符串来操作.
这句话是推测.
第二,给一个int插值时,要给int类型,尽量不用''括起来,否则可能会出错,int类型可插整数,0和null;第三,插值前尽量做检验,比如:不要给一个整型插入浮点型;
第四,如果字段不在sql中,则插默认值,如null;如果字段在sql上,不能插空值,但可插'null'或其他值第五:mysql的理念是,他不负责检查数据类型是否合法,尽管可能进行一些转换,它认为检查数据是否合法不是它的工作
明天结贴!
我什么都加单引号,好像还没有出过错……另外反正提交来的post/get都是字符串,那就让大家都是字符串把……好方便啊……
而且,SELECT 1 + '1'
结果都是2,我觉得php和mysql都是好人……
另外,int 字段,插入''时出错,可能是没有加引号,变成 "insert table set field=";
如果"insert table set field='' "; 应该没问题吧