簡體   English   中英

PHP未將數據插入MySQL

[英]PHP not inserting data into MySQL

我看過其他文章並嘗試了一些建議,但似乎仍無法在數據庫中填充特定表。

我將提供一些代碼塊以使事情變得透視。

這是用於創建要用數據填充的表的代碼:

    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>

輸入數據並點擊提交時,我沒有任何錯誤。 我意識到我在代碼中所做的某些事情不是必需的,例如刻度線。 所有這些都是試圖查看它是否可以解決我的問題。 關於我能做什么的任何建議?

更新6/20/14

看來麻煩在於我的CREATE TABLE語法。 當我將類型'int'或'float'替換為'varchar'時,對於字段(dID是一個例外),它將更新表。 熟悉發布“ int”或“ float”值的人嗎?

更新6/20/14幾個小時后...

伙計們,看來我已經發現問題了。 這是一個很小的技術問題,我使代碼復雜化,以致於進一步出錯。

這個想法是這樣的:

我不必擔心此時會設置一個字段,因為許多字段將保持為空。 我只需要為每個字段填寫一些使用此方法的內容:

$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。 謝謝您的幫助!

您試圖在浮點位置插入字符串。

您應該刪除非varchar拼寫中的刻度。 example devicePort1被聲明為int,但是insert語句發送帶有滴答聲的值,例如, '".$devicePort1."',而不是此,因為MySQL期望int您應該發送, ".$devicePort1.", ,即沒有滴答聲。

同樣,因為ID為AUTO_INCREMENT,所以您不應嘗試為其設置值。 要檢查您的語句是否正確,請echo $query ,然后嘗試從MySQL控制台或PHPMyAdmin執行該語句。

好的做法是使用准備好的語句或PDO。 檢查此PHP:PDO-手冊預備語句手冊 這些鏈接來自Php.net,其中包含很好的示例解釋。

isset返回布爾值(true / false)不是整數或其他值( http://www.php.net//manual/zh/function.isset.php

另一個錯誤是關於如何使用三元比較的。 在此處查看有關此內容的更多信息: http : //davidwalsh.name/php-shorthand-if-else-ternary-operators

所以代替:

isset($_POST['deviceName']) == 1 ? ($deviceName = ($_POST['deviceName'])) : null;

你應該寫

$deviceName = isset($_POST['deviceName']) ? $_POST['deviceName'] : null;

另外,請考慮使用某種循環來分配這些變量(如果需要的話),而不要大量復制代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM