該代碼用於更新用戶登錄的IP地址。當我打印$ sql字符串時,它似乎是正確的,IP地址是1886883852,但更新到mysql後,值是2149463110.我試圖在mysql中將數據類型設置爲INT(11)bigint(12),都是一樣的。 如果我嘗試寫一個字符串作爲php mysql更新IP地址無法正常工作
UPDATE ddns SET LastIP=1886883852, LastUpdate=now() WHERE ID=1
直接,而不使用任何變量,它工作正常。
真的不明白。任何人都可以幫忙?
//get dns
function getIP(){
//check the current ip address registered
//Test if it is a shared client
if (!empty($_SERVER['HTTP_CLIENT_IP'])){
$ipaddr=$_SERVER['HTTP_CLIENT_IP'];
//Is it a proxy address
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ipaddr=$_SERVER['HTTP_X_FORWARDED_FOR'];
}else{
$ipaddr=$_SERVER['REMOTE_ADDR'];
}
$ipaddr = ip2long($ipaddr);
return $ipaddr;
}
$ipaddr = getIP();
$sql = "UPDATE ddns SET LastIP=$ipaddr, LastUpdate=now() WHERE ID=1";
echo $sql; **//here UPDATE ddns SET LastIP=1886883852, LastUpdate=now() WHERE ID=1**
$result = mysqli_query($dbh,$sql) or die("Query failed:");
**//Here after updated, the value of ipaddr in database is 2149463110**
if ($result)
echo "Update ddns successfully";
else
echo "faild to update ddns";
爲什麼插入變量而不是使用預處理語句?這不是mysql上mysqli的主要好處之一嗎? – Barmar
無論我如何處理這個問題,它都不應該發生。我能想到的唯一改變就是轉向準備好的聲明,如@Barmar所建議的。 – Sammitch
謝謝。準備好的聲明似乎與mysqli有問題。從vi更改編輯器後,問題得到解決。很奇怪。 – alzhao