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
(
idsiteData
int(11) NOT NULL AUTO_INCREMENT,
radio
binary(1) DEFAULT NULL,
antenna
binary(1) DEFAULT NULL,
gpsMaj
binary(1) DEFAULT NULL,
gpsMin
binary(1) DEFAULT NULL,
acpwr
binary(1) DEFAULT NULL,
`gener.. .
「gpsmin」の Vardump はこれを示します:
文字列(1)「0」
2 番目の vardump を正しく行ったかどうかはわかりませんが、一連の「未定義の変数」エラーに続く最後の行を次に示します。
string(157) "INSERT INTO (ラジオ、アンテナ、gpsMaj、gpsMin、acpwr、ジェネレーター、ブランク 1、ブランク 2、バッテリー 1、バッテリー 2、温度、日付、時刻) 値 (, , , , , , , , , )"