尝试在MySQL表中插入单行时,我收到“数据太长了”列错误。我知道数据库设置正确,因为我可以以其他方式插入相同的数据,没有问题。以下是代码的基本部分。如果你想看到任何函数的完整代码而不是伪代码,我会很乐意发布 - 只是试图避免混乱。
输出如下:
连接到MySQL
连接到数据库都柏林
第1行的列'gpsMin'的数据太长了
testindex.php
include 'parseData.php';
parseAll("dublin");
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()
因此db设置正确,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
二进制(1)DEFAULT NULL,
acpwr
二进制(1)DEFAULT NULL,
`生成数据,无须...
'gpsmin'上的Vardump显示了这一点:
string(1)“0”
我不确定第二个vardump是否正确,但这是最后一行,其中包含一堆“未定义变量”错误:
string(157)“INSERT INTO(radio,antenna,gpsMaj,gpsMin,acpwr,generator,blank1,blank2,battery1,battery2,temperature,date,time)VALUES(,,,,,,,,,,, ,)“
答案 0 :(得分:0)
查看生成的SQL查询,我认为您尝试作为二进制文件插入的变量实际上是null
或其他。
可能有效的方法是将所有输入内插为:
$a = (int)$a;
$b = (int)$b;
$c = (int)$c;
// ... do the rest for all of your binary variables
(即使它不能解决你的问题,总是很好的做法是将你真正需要的东西变成零而不是null
。当谈到区分时,PHP有时很邋零和空值)
答案 1 :(得分:0)
我明白了!我在其中插入了两个名为$ d的变量。这就是我过于高效的结果。谢谢大家!