1

MySQL テーブルに単一の行を挿入しようとすると、「列に対してデータが長すぎます」というエラーが発生します。同じデータを他の方法で問題なく挿入できるため、データベースが正しく設定されていることはわかっています。コードの重要な部分は次のとおりです。疑似コードではなく、関数の完全なコードを見たい場合は、喜んで投稿します。混乱を避けるためです。

出力は次のとおりです。

MySQL に
接続 データベース dublin に接続
行 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);

この時点で、strlen() 関数に呼び出された echo は、次の出力を生成します。
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() 関数はデータが適切な長さであることを示しています。何も追加されていません。最初の 3 つ (ラジオ、アンテナ、gpsmaj) は問題なく動作します。この関数の別のバージョンが dbconnector.php というファイルにあり、正常に動作します。私は2つの違いを見つけることができません。

前もって感謝します!

編集:
列のデータ型はバイナリです。
var 値は 0 です。

SHOW CREATE TABLE ダブリン;
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」

2 番目の vardump を正しく行ったかどうかはわかりませんが、一連の「未定義の変数」エラーに続く最後の行を次に示します。

string(157) "INSERT INTO (ラジオ、アンテナ、gpsMaj、gpsMin、acpwr、ジェネレーター、ブランク 1、ブランク 2、バッテリー 1、バッテリー 2、温度、日付、時刻) 値 (, , , , , , , , , )"

4

2 に答える 2

0

null生成された SQL クエリを見ると、バイナリとして挿入しようとしている変数は実際には何かであると思います。

うまくいくのは、すべての入力を次のように int キャストすることです。

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

(ここで問題が解決しない場合でも、 の代わりにゼロが本当に必要なものを int キャストすることは常に良い習慣ですnull。PHP は、ゼロと null を区別するときにずさんなことがあります)

于 2013-01-22T23:56:29.383 に答える
0

私はそれを考え出した!$dという名前の2つの変数をそこに貼り付けました。それは私が過度に効率的であるために得るものです。皆さんありがとう!

于 2013-01-23T14:02:36.287 に答える