当我试图在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(,,,,,,,,,,,,)”
什么是列数据类型? var上的var_dump()显示什么? – 2013-01-22 23:23:39
换行符在文件末尾,也许? –
$ gpsMin的实际值是多少?您可能还想添加实际生成的查询,并确保在使用mysql_query之前正确地转义您的数据 - 除非您可以保证所有值直接在查询中以当前形式可用。 – MatsLindh