thinkphp从excel读取数据插入mysql,生成sql语句正确,单独能执行,用
$model->execute($sql),执行时,凡是字符串都只插入了首字符。生成sql语句是这样 insert into table values('','ABCDEF'),没有列举完,只是举例,单独执行插入成功,在thinkphp里面执行,字符串ABCDEF只插入了一个A。在tp里面打印出最后执行的sql语句也是对的thinkphpMySQL数据库

解决方案 »

  1.   

    直接执行也是同样的结果吗?   我本来还以为会是数据库字段类型和长度限制了   要是直接执行也这样  那得追踪到TP的最终mysql_query的地方检察mysql_query之前的$sql
      

  2.   

    能说详细一些吗?谢谢你其实是你这边应该描述的详细一点没有无解的"灵异问题" 一定是哪里有问题依我浅见,或者是TP对SQL语句的处理出了问题,或者是mysql的数据结构/类型有问题. 没能想出其他可能所以先试试手动写SQL语句直接在mysql执行,看看结果,你现在说插入成功,插入后的结果呢?也是想要的吗?如果手动插入结果正确 那就在TP框架内顺藤摸瓜找到TP插入mysql的语句 将此时的SQL语句打印出来 看跟你手写的SQL语句是否一致.然后才好进一步看....
    当然,可能有大神遇到过这种问题能一下指出原因 不过在此之前可以先试试这样找找原因
      

  3.   

    其实是你这边应该描述的详细一点$res = $order_insert->execute($sql);
    echo $order_insert->getLastSql();
    在执行execute的时候,$sql是正常的,复制出来单独执行,结果也是想要的。 当执行完,用$order_insert->getLastSql();获取最后一条执行的sql语句,sql语句也是正常的,对这个sql字符串直接复制到execute执行也是能正常插入数据,就是当做参数执行时,出现上面说的情况
      

  4.   

    你怎么不在当做参数执行时,也看一下 $order_insert->getLastSql() 呢
      

  5.   

    Quote: 引用 7 楼 xuzuning 的回复:

    你怎么不在当做参数执行时,也看一下 $order_insert->getLastSql() 呢
    Quote: 引用 4 楼 zengweiping 的回复:
    看了的,就是把组装出来的sql语句当做参数给execute,然后执行后,再获取最后一条执行的sql语句,打印出来是完整的sql语句  insert into table value('','ABCDEF');这样的语句,但是数据库的表里面对应ABCDEF这个字符只插入了一个字符A
      

  6.   

    这个会不会是数据库的字段问题啊,直接把sql在mysql执行还会这样?
      

  7.   

    已经找到问题,是读取excel的时候,要加一句setOutputEncoding