MySQL / PHP“数据太长了”

时间:2013-01-22 23:21:03

标签: php mysql

尝试在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(,,,,,,,,,,, ,)“

2 个答案:

答案 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的变量。这就是我过于高效的结果。谢谢大家!