2013-01-22 82 views
1

当我试图在MySQL表中插入一行时,出现“数据太长了列”错误。我知道数据库设置正确,因为我可以用其他方式插入相同的数据而没有任何问题。这里是代码的重要部分。如果你想看到任何函数的完整代码而不是伪代码,我很乐意发布 - 只是为了避免混乱。MySQL/PHP“数据太长的列”

输出如下:

连接到MySQL
连接到数据库都柏林
数据太长在行1

testindex.php

include 'parseData.php'; 
parseAll("dublin"); 
列 'gpsMin'

parseData.php

function parseAll($sitename){ 
    function pullAndDelete($filename){} #reads data from file, deletes file 
    $data = pullAndDelete($sitename); 

    function parse($str){} #extracts first piece of data from data string 
    function chop2($str){} #removes 2 chars from front of string 
    function chop14($str){} #removes 14 chars from front of string 

    #$data is put through parse and chop functions several times - 
    #take first piece of data, chop it off, take new first piece, chop again, etc. 
    #Function calls up through relevant one: 

    $radio=parse($data); 
    $short1=chop14($data); 
    $antenna=parse($short1); 
    $short2=chop14($short1); 
    $gpsmaj=parse($short2); 
    $short3=chop14($short2); 
    $gpsmin=parse($short3); 

此时,echo'ed叫的strlen()函数产生以下输出:
收音机:0的strlen:1
天线:0的strlen:1
GPS专业:0的strlen:1
GPS辅修:0的strlen:1

function writeToDB($site, $a, $b, $c, $d, $e, $f, $g, $h, $b1, $b2, $temp, $d, $t) 
    { 
    mysql_connect(xxx,xxx,xxx) or die(mysql_error()); 
    echo "Connected to MySQL<br />"; 

    mysql_select_db("scada") or die(mysql_error()); 
    echo "Connected to table ".$site."<br />"; 

    mysql_query("INSERT INTO ".$site." (radio, antenna, gpsMaj, gpsMin, acpwr, 
    generator, blank1, blank2, battery1, battery2, temperature, date, time) 
    VALUES($a, $b, $c, $d, $e, $f, $g, $h, $b1, $b2, $temp, $d, $t)") 
    or die(mysql_error()); 
    echo "Data inserted into table ".$site; 
    } 

    writeToDB($sitename, $radio, $antenna, $gpsmaj, $gpsmin, $acpwr, $generator, 
    $blank1, $blank2, $batt1, $batt2, $temperature, $mysqldate, $mysqltime); 
} #end parseAll() 

所以数据库设置正确,和()函数告诉我的数据strlen的是正确的长度。我没有看到任何东西以任何方式添加到其中,前三个(无线电,天线,gpsmaj)进入正常状态。我在名为dbconnector.php的文件中找到了另一个版本的函数,它可以正常工作。我找不到两者之间的区别。

在此先感谢!

编辑:
列数据类型是二进制的。
VAR值为0.

SHOW CREATE TABLE dublin;
CREATE TABLE dublin
idsiteData INT(11)NOT NULL AUTO_INCREMENT,
radio二进制(1)DEFAULT NULL,
antenna二进制(1)DEFAULT NULL,
gpsMaj二进制(1)DEFAULT NULL,
gpsMin binary(1)DEFAULT NULL,
acpwr binary(1)DEFAULT NULL,
`gener ...

Vardump上 'gpsmin' 表明这一点:

串(1) “0”

不知道我做了第二vardump正确的,但这里的最后一行,它遵循一串 “未定义的变量” 错误:

串(157)“INSERT INTO(无线电,天线,gpsMaj,gpsMin,ACPWR,发电机,BLANK1,BLANK2,battery1,电池2,temperatur E,日期,时间)VALUES(,,,,,,,,,,,,)”

+0

什么是列数据类型? var上的var_dump()显示什么? – 2013-01-22 23:23:39

+1

换行符在文件末尾,也许? –

+0

$ gpsMin的实际值是多少?您可能还想添加实际生成的查询,并确保在使用mysql_query之前正确地转义您的数据 - 除非您可以保证所有值直接在查询中以当前形式可用。 – MatsLindh

回答

0

在生成的SQL查询看,我认为你要插入的二进制文件实际上是null变量或一些东西。

什么可能工作用INT铸造所有的输入,如:

$a = (int)$a; 
$b = (int)$b; 
$c = (int)$c; 
// ... do the rest for all of your binary variables 

(即使它并不在这里解决您的问题,它始终是很好的做法,诠释铸东西你真的需要一个零而不是一个null。PHP有时是零散的区分零和零)

+0

完成。它没有解决问题,但我会把它留在那里。谢谢! –

+0

@KatherineSkipper对不起,它并没有真正帮助你...我会研究还有什么问题 – ashiina

0

我想通了!我卡住了两个名为$ d的变量。这就是我得到的过于高效。谢谢大家!