1

尝试在 MySQL 表中插入单行时出现“数据对列而言太长”错误。我知道数据库设置正确,因为我可以毫无问题地以其他方式插入相同的数据。以下是代码的基本部分。如果您想查看任何函数的完整代码而不是伪代码,我很乐意发布 - 只是为了避免混乱。

输出如下:

连接到 MySQL
连接到数据库 dublin
第 1 行的列“gpsMin”数据太长

测试索引.php

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

解析数据.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);

此时,调用 strlen() 函数的 echo'ed 产生以下输出:
Radio: 0 Strlen: 1
Antenna: 0 Strlen: 1
GPS Major: 0 Strlen: 1
GPS Minor: 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。

显示创建表都柏林;
CREATE TABLE dublin(
idsiteDataint(11) NOT NULL AUTO_INCREMENT,
radiobinary(1) DEFAULT NULL,
antennabinary(1) DEFAULT NULL,
gpsMajbinary(1) DEFAULT NULL,
gpsMinbinary(1) DEFAULT NULL,
acpwrbinary(1) DEFAULT NULL,
`gener.. .

“gpsmin”上的 Vardump 显示了这一点:

字符串(1)“0”

不确定我是否正确执行了第二个 vardump,但这是最后一行,后面是一堆“未定义的变量”错误:

字符串(157)“插入(无线电,天线,gpsMaj,gpsMin,acpwr,发电机,空白1,空白2,电池1,电池2,温度,日期,时间)值(,,,,,,,,,,,,,,,,,)”

4

2 回答 2

0

查看生成的 SQL 查询,我认为您尝试作为二进制文件插入的变量实际上是null什么。

可能的工作是通过转换所有输入:

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

(即使它不能在这里解决您的问题,将您真正需要零而不是null.

于 2013-01-22T23:56:29.383 回答
0

我想到了!我在其中插入了两个名为 $d 的变量。这就是我因过于高效而得到的。谢谢大家!

于 2013-01-23T14:02:36.287 回答