簡體   English   中英

從php數組插入表中的值有誤

[英]Wrong value inserted in table from php array

從網站抓取的代碼:

<?php
require_once("db.php");
$url = 'http://www.indianrail.gov.in/mail_express_trn_list.html';
$ch = curl_init($url);

set_time_limit(600);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

$result = curl_exec($ch);
//echo $result;
error_reporting(E_ERROR | E_PARSE);
$dom    = new DOMDocument('1.0', 'UTF-8');  
$dom->loadHTML($result);
if($dom)
{
        $xpath = new DOMXPath($dom);


        $q = '///*[contains(concat(" ", normalize-space(@class), " "), " table_border ")]/tr';


        $nodes = $xpath->query($q);
        foreach($nodes as $tr){ // DOMNodesList implements traversable 
            echo "<br>";
            $tds = $tr->childNodes;
            $i = 0;
            foreach($tds as $td){
                $arr[$i]=$td->nodeValue;
                $i++;
            }
            var_dump($arr);
            //echo"<br><=====><br>";
            //echo ""
            mysqli_query($con,"INSERT INTO `irl`.`trains` (`TrainNo`, `TrainName`, `Origin`, `DepartureTime`, `Destination`, `ArrivalTime`) 
                                VALUES ('$arr[0]', '$arr[1]', '$arr[2]', '$arr[3]', '$arr[4]', '$arr[5]');") or die(mysqli_error($con));
        }

}
else
echo "invalid DOMDocument <br>";

即使arr [0]包含正確的值(我檢查了var_dump($ arr)),這也會在數據庫的第一個位置(TrainNo。)中插入“ 0”。這是怎么回事? 在每次迭代中,使用正確的值填充arr []。 database field is int with size 8

將字段更改為varchar確實可以解決問題 ,但是如果datatyoe是問題,為什么正確插入第一行(火車編號2696)

例:

arr[0]=> 09705
arr[1]=>JP DEE AC EXP 
arr[2]=>JAIPUR 
arr[3]=>07:55
arr[4]=>DELHI S ROHILLA    
arr[5]=>13:20

忽略第一行,它包含表標題,因此可以理解它包含0:0的時間和0的列車號。但是下面的行應該沒問題,在突出顯示的行中,第一位置應該是9705 ,但其中包含0:編輯:為方便起見包括屏幕截圖:
循環中$ arr的var_dump的屏幕截圖,然后是phpmyadmin中的數據庫行:
var_dump($ arr)

數據庫行的篩選

$arr[0]變量的屏幕快照中,整數值09705之前有一個空格。 如果intval($arr[0])是數據庫中的整數類型,請嘗試使用它。

如果要保留前導0,則必須將此列的類型更改為VARCHAR,並插入trim($arr[0])以刪除空格字符。

試試trim($arr[0]); 在插入數據庫之前。

刪除查詢中$ arr [0]周圍的引號? 並在您的代碼中執行此操作:

if ($i > 0) {
$arr[$i]=$td->nodeValue;
}
else {
 $arr[$i]=intval($td->nodeValue);
}

因為nodeValue始終為String類型。

有點奇怪,您的第一個插入內容已轉換為string(6),而其他插入內容已轉換為string(8)。 您之間是否修改過代碼?

暫無
暫無

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

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