2014-03-07 62 views
0

我有超過200,000行的龐大數據庫,而且我面臨的問題是每當我在我的loaclhost中運行時,它都會顯示準確的結果,但是當我在它錯過了一些結果的服務器..無法從數據庫中找到數據

問題如下...

當過我在輸入localhost IP它顯示輸出

但每當我運行在同一個IP它顯示服務器沒有結果

我的服務器的鏈接是http://ip2country.1eko.com/index.php

查詢代碼如下所示..

<?php 
if(isset($_REQUEST['submit'])) 
{ 
$ip = ip2long($_REQUEST['ip']); 

$res = mysql_query("SELECT * from ip2country WHERE $ip BETWEEN begin_long_ip AND end_long_ip") or die(mysql_error()); 
$row = mysql_fetch_array($res); 
echo "<h1>Country Name : ".$row['country_name']."</h1><br />"; 
echo "<h1>Country Code : ".$row['country_code']."</h1><br />"; 

$res1 = mysql_query("SELECT COUNT(*) AS Total FROM ip2country") or die(mysql_error()); 
$row1 = mysql_fetch_array($res1); 
echo $row1['Total']; 

} 

?>

任何幫助將不勝感激...

+1

'ip'不只是一個數字,對吧?你不能像那樣使用'between'。 –

+1

juergen,看起來像是用'$ ip = ip2long'($ _ REQUEST ['ip'])'將其轉換爲'long';'如果我沒有弄錯。 Subhomoy,你有'error_reporting(E_ALL)'和'ini_set('display_errors',1)'?試試'<?php phpinfo(); ?>並檢查你的服務器上是否加載了mysql擴展。 另外'mysql_ *'已被棄用,你應該真的使用mysqli或PDO來代替。 – Matt

+0

我已經使用ip2long函數將ip轉換爲數字... –

回答

0

你沒有得到我的評論,所以這裏的解釋。 它不難頁面上看到討厭的錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'BETWEEN begin_long_ip AND end_long_ip' at line 1

,這是bacause您的查詢是錯誤的:

SELECT * from ip2country WHERE $ip BETWEEN begin_long_ip AND end_long_ip

你應該改變這樣的:

SELECT * from ip2country WHERE $ip > begin_long_ip AND $ip < end_long_ip

PS。請注意,mysql_ *函數已被棄用,不應再使用它們。改用Mysqli/PDO。

+0

據我所知,他們都工作相同... http ://www.w3schools.com/sql/sql_between.asp –

+0

我可能是盲人,但我不能看到你可以使用列名稱作爲值之間的部分... – MSadura

+0

可能是我誤會,但如何死它工作以及在我的本地主機...它的工作完美沒有任何錯誤...這怎麼可能... –