1 接收时,不管是什么类型,一律为string类型.
 详细可以用var_dump($_POST);来测试
2 表单中没有该name的话,会有NOTICE提示.该值为 NULL
 表单为空时,该值是字符串,也为空.
3 mysql还是会自动转换的.
 对于int类型,不需要加引号.
 如果字段属于varchar,你插入int类型的值时可以不加引号,但是如果插入的是字符串的话,不加引号,会出错.
 
 mysql如果字段默认为NULL,如果插入时没有这个字段,这个值就为NULL. 如果插入时有这个字段,按照字段最终的值为主.
插入时是啥值就是啥值.4 3已经提到了.int值插入varchar字段类型时,不加引号可以,默认是给转换的.但是varchar值插入int,哪肯定是提示错误的.PHP本来就是弱类型语言,所以如果类型确定,根据程序需要,可以进行强制转换.但其实强制转换的时候很少.  

解决方案 »

  1.   

    在 有text和INT有变量插入时
    text为 "变量"
    int为变量如果没有值插入
    在insert into table(字段1,字段2....)的字段名不写,就默认了null如果要写字段名,又没有值插入,那就自定义一个值放在那里啊
    比如,text  "0"
         int   0这样sql语句就不会出错了哦
    还有就是
    不管是POST还是get方式接的值,除数字意外的字符,是string,数字你可以自己变换的
      

  2.   

    MySQL 字段为INT 类型的,插入数据时候可以使用 "0" 来插入0!
      

  3.   

    LZ可以温习一下PHP手册中类型戏法篇.温故而知新.
      

  4.   

    LZ可以温习一下PHP手册中类型戏法篇.温故而知新.
      

  5.   

    呀, 原来csdn论坛可以在一次回复两下呀...
      

  6.   

    后来发现基本上和PHP变量关系不密切,感觉应和sql语句写法有关因为,执行插入操作时用的是sql语句,只要Sql语句合法,就能插入数据表
    我插入时,发现这么个问题:
    如果将一个字符串放入int ,会不会出错?   比如: '12345' 如果 将一个''放入int ,会不会出错?如果我这个字段插入时声明了,但值为变量,变量为空,即,,型的,是否会出错?如果我将一个int 放入字符型,如text 或varchar,会不会出错
      

  7.   

    1 如果将一个字符串放入int ,会不会出错?  比如: '12345' 
      没有问题。
    2 int类型的字段只能插入数字。数字加上引号如上所示,只是兼容的写法。
    3 变量为空无所谓,但是如果不符合字段类型,是不允许的。
    4 不会,哪怕不加引号都无所谓。其实你说的问题,我在第一楼都已经回答了。
      

  8.   


    以下是我的测试结果,不正大家有没有遇到这种情况1  我将'12345' 插入int 时的,错误提示超出范围
    2 int 字段,插入''时出错,插入0正确,插入'0'没试过
    3  变量为空时,在sql的表现就是 insert into tbl (int_f,field2,string_f) values (5,,'aaa')   出错,原因,,为空
    4  没试过
      

  9.   

    类型转换问题!
    看你的数据库字段是什么类型的,另外你的SQL语句要符合MySQL的语法就可以了,
    另外据库中的整型常量和PHP中的整型常量不是一回事。
    $id = 1;
    $sql = "select * from tbl where id = " . $id;
    这个时候会有类型转换!

    $sql = "select * from tbl where id = " . $_POST['id'];
    不会有PHP的类型转换!还有你的超出范围问题是MySQL报错的吧,是的话说明你的数据库字段类型可能是tinyint或者smallint
      

  10.   

    楼上的可能不准确一个sql中,数据类型是如何表示的比如:字符串类型,在sql中可以用''表示日期类型呢?要不要加''号?
    整型呢?要不要加引号?在sql中,加''与不加''有何区别?事实上,如果sql中的用的是变量,它只会替代变量的值,并不能告诉sql这是一个字符串或是整型或是日期
      

  11.   


    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语法
      
      
      
      

  12.   

    其实可以肯定的是, mysql与语言无关.
    就算你在c或者c++等变量定义十分严密的情况下,只要是标准的sql语句就能执行成功.换句话来说,无论你是什么类型, 其实mysql在执行的时候都当做一个字符串来操作.
    这句话是推测.
      

  13.   

    接分都没人接!总结一下了:首先,在mysql的sql中,''表示字串或日期;
    第二,给一个int插值时,要给int类型,尽量不用''括起来,否则可能会出错,int类型可插整数,0和null;第三,插值前尽量做检验,比如:不要给一个整型插入浮点型;
    第四,如果字段不在sql中,则插默认值,如null;如果字段在sql上,不能插空值,但可插'null'或其他值第五:mysql的理念是,他不负责检查数据类型是否合法,尽管可能进行一些转换,它认为检查数据是否合法不是它的工作
    明天结贴!
      

  14.   

    接分,大家分析的都挺好的。1/ PHP是弱数据类型的,基本上可以不用考虑,数字和字符串转变不成问题2/ 可以试试isset和empty函数的区别3/ MySQL处理的SQL语句!只有单引号有点区别,但这也是在SQL语句中的。
      

  15.   

    太不给面子了,分我一定要接的……
    我什么都加单引号,好像还没有出过错……另外反正提交来的post/get都是字符串,那就让大家都是字符串把……好方便啊……
    而且,SELECT 1 + '1'
    结果都是2,我觉得php和mysql都是好人……
    另外,int 字段,插入''时出错,可能是没有加引号,变成 "insert table set field=";
    如果"insert table set field='' "; 应该没问题吧