【发布时间】:2026-01-28 02:00:01
【问题描述】:
我查看了其他帖子并尝试了一些建议,但我似乎仍然无法在我的数据库中填充特定的表。
我将提供一些我的代码块来透视事物。
这是我创建要填充数据的表的代码:
CREATE TABLE `Devices` (
`dID` int(11) unsigned NOT NULL AUTO_INCREMENT,
`deviceType` enum('BT','C1','AW') DEFAULT NULL COMMENT 'BT = Bluetooth, C1 = C1 Reader, AW = Acyclica Wifi',
`deviceName` varchar(255) NOT NULL DEFAULT '',
`deviceIP` varchar(15) NOT NULL DEFAULT '',
`devicePort1` int(4) NOT NULL,
`devicePort2` int(4) DEFAULT NULL,
`deviceRealLatitude` float(10,6) NOT NULL,
`deviceRealLongitude` float(10,6) NOT NULL,
`deviceVirtualLatitude` float(10,6) DEFAULT NULL,
`deviceVirtualLongitude` float(10,6) DEFAULT NULL,
`deviceChanged` tinyint(1) DEFAULT NULL,
`deviceStatus` tinyint(1) DEFAULT NULL,
`deviceLastSeen` timestamp NULL DEFAULT NULL,
`deviceBufferSize` int(4) DEFAULT NULL,
`deviceSoftwareVersion` varchar(20) DEFAULT NULL,
`deviceMacAddress` varchar(17) DEFAULT NULL,
`deviceTest` tinyint(1) DEFAULT NULL,
`deviceAPIKey` varchar(100) DEFAULT NULL COMMENT 'Only used with the Acyclia Scanners',
`deviceSerialID` int(6) DEFAULT NULL COMMENT 'Only used with the Acyclia Scanners',
PRIMARY KEY (`dID`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1;
我已经声明了所有字段变量,即
$dID = 0;
.....
$deviceSerialID = 0;
我检查了每个字段是否已设置,即
isset($_POST['dID']) == 1 ? ($dID = ($_POST['dID'])) : null;
.....
isset($_POST['deviceSerialID']) == 1 ? ($deviceSerialID = ($_POST['deviceSerialID'])) : null;
这里是我使用 INSERT INTO "表名" --> VALUES
$insert_query = "INSERT INTO Devices (`dID`, `deviceType`, `DeviceName`, `deviceIP`,
`devicePort1`, `devicePort2`, `deviceRealLatitude`, `deviceRealLongitude`,
`deviceVirtualLatitude`, `deviceVirtualLongitude`, `deviceChanged`, `deviceStatus`,
`deviceLastSeen`, `deviceBufferSize`, `deviceSoftwareVersion`, `deviceMacAddress`,
`deviceTest`, `deviceAPIKey`, `deviceSerialID`) VALUES ('".$dID."', '".$deviceType."',
'".$deviceName."', '".$deviceIP."', '".$devicePort1."', '".$devicePort2."',
'".$deviceRealLatitude."', '".$deviceRealLongitude."', '".$deviceVirtualLatitude."',
'".$deviceVirtualLongitude."', '".$deviceChanged."', '".$deviceStatus."',
'".$deviceLastSeen."', '".$deviceBufferSize."', '".$deviceSoftwareVersion."',
'".$deviceMacAddress."', '".$deviceTest."', '".$deviceAPIKey."',
'".$deviceSerialID."')";
mysqli_query($conn,$insert_query);
现在,在我的 html 表单中,我只想为某些字段输入数据:
<fieldset>
<form name = "form1" id = "form1" action = "" method = "post">
Device ID: <input type="text" name="dID" > <br>
Device Type: <select name="deviceType">
<option value = "BT">BT</option>
<option value = "C1">C1</option>
<option value = "AW">AW</option>
</select> <br>
Device Name: <input type="text" name="deviceName" > <br>
Device IP: <input type="text" name="deviceIP" > <br>
Device Port 1: <input type="text" name="devicePort1"> <br>
Device Port 2: <input type="text" name="devicePort2"> <br>
<input type = "submit" name = "submit" value = "submit" />
</fieldset>
</form>
当我输入我的数据并点击提交时,我没有收到任何错误。我意识到我在代码中所做的一些事情是不必要的,例如刻度线。这一切都是试图看看它是否能解决我的问题。关于我能做什么的任何建议?
2014 年 6 月 20 日更新
似乎问题在于我的 CREATE TABLE 语法。当我用“varchar”替换类型“int”或“float”时,对于字段(dID 是一个例外),它会更新表。任何熟悉发布“int”或“float”值的人?
几个小时后,2014 年 6 月 20 日更新...
伙计们,我似乎发现了问题所在。这是一个小的技术问题,我将代码复杂化以淹没在进一步的错误中。
思路如下:
我不需要担心此时设置的字段,因为许多字段将保持为空。我只需要为每个字段使用这种方法填写一些:
即
$deviceType = $_POST['deviceType'];
此外,使用“int”或“float”需要在如何实现 INSERT INTO ... VALUES 子句方面有所不同。如果让它为空(我现在是),我不能这样做:
$insert_query1 = "INSERT INTO Devices (deviceChanged) VALUES ('$deviceChanged');
此迭代导致表格无法填充适当的值。
相反,用 null 填充它:
$insert_query1 = "INSERT INTO Devices (deviceChanged) VALUES (NULL);
PHP 现在将数据插入 MySQL。感谢您的帮助!
【问题讨论】:
-
您应该使用带有占位符的准备好的语句,并将您的输入值绑定到这些占位符。这将处理 sql 注入,您也不必逃避您的值。
-
检查是否有任何错误?
-
你能举一个这个准备好的陈述的例子吗?
-
我尝试使用 mysqli_error($link) 但没有任何反应
-
没关系,但
error_reporting(E_ALL); ini_set('display_errors', 1);会产生更多收益。
标签: php html mysql database mysqli