2010-09-06 58 views
0

我一直在我公司託管軟件包的子域上構建網站。它有PHP MySQL的操作是在後臺發生的事情,即INSERT語句中,選用等某些託管軟件包上的MySQL查詢問題

他們是最基本的基本的SQL語句,他們都做工精細。

但是,我最近從我的子域中複製了一切,並將其全部上傳到我的客戶自己的主機包,運行於1&1,現在,我的INSERT語句不起作用。 SELECT,DELETE語句都可以正常工作,但不是我的INSERT。

我認爲這是兩個問題之一,無論它是新數據庫的權限錯誤或我有我的代碼中的一些明顯的錯誤我最後一個數據庫似乎記住,沒有這麼多。

這裏是我的插入代碼:

<?php 
include 'data.php'; 

$b_name = mysql_real_escape_string($_POST['businessName']); 
$b_town = mysql_real_escape_string($_POST['placeName']); 
$b_code = mysql_real_escape_string($_POST['postCode']); 
$latlng = mysql_real_escape_string($_POST['latLong']); 

mysql_connect($host, $user, $pass) or die ("Wrong Information"); 

mysql_select_db($db) or die("Wrong Database"); 

$newloc = preg_replace("/^.*\(([^)]*)\).*$/", '$1', $latlng); 

$result = mysql_query("INSERT INTO reseller_addresses VALUES (NULL , '$b_name', '$b_code', '$b_town', '$newloc');") or die ("Broken Query"); 

echo "<script>setTimeout(\"self.parent.location.reload(true);\", 1000);</script><font color=\"#fbf7d7\">$businessName Successfully Added to the Database</font>"; 

mysql_close(); 
?> 

它是關於加入地理位置爲從谷歌地圖/形式設置的數據庫。

不幸的是,我無法授權進行實時預覽,因爲發生故障的管理區域是安全的。

在此先感謝您的幫助。

編輯:我已經通過了相同的文件來回我的Web服務器和我的客戶,他們都對我的工作,而不是我的客戶。

編輯:我已經在這裏很好地解釋了實際問題,對不起。基本上,一個新記錄被插入到數據庫中,但它是空的。

print_r($ _ POST);揭示:

Array ([businessName] => test [placeName] => test [postCode] => test [latLong] => (51.152495, -1.440411) [Submit] => Submit Place) 

這就是一切,我已經提交

+3

什麼不行?什麼錯誤信息給你? – 2010-09-06 13:43:47

+0

這聽起來像你客戶端主機上的數據庫用戶只能訪問「讀取」操作。但是你應該從MySQL那裏得到一個明確的錯誤。 – prodigitalson 2010-09-06 13:45:03

+0

看起來像一個權限/配置問題,你可以做任何事情,但INSERT。 – fabrik 2010-09-06 13:45:17

回答

0

請更換說

$result = mysql_query("INSERT INTO ...") or die ("Broken Query"); 

具有以下行:

$query = "INSERT INTO ..."; 
echo $query; 
$result = mysql_query($query) or die (mysql_error()); 
$warnings = mysql_query("SHOW WARNINGS"); 
if (mysql_num_rows($warnings)) { 
    while ($row = mysql_fetch_assoc($warnings)) { 
     echo "\nMySQL Warning: ".$row['Message']; 
    } 
} else { 
    echo "\nNo warnings"; 
} 

,告訴我們什麼是輸出。

此外,請在include 'data.php'; 之後立即添加error_reporting(E_ALL & ~E_STRICT);,並查看是否收到任何錯誤消息。

請也給我們的SHOW CREATE TABLE reseller_addresses輸出。

+0

感謝您的回答,但自從我寫了這個問題後,我發現問題不在於我的查詢,而是在於我的mysql_real_escape_string。刪除這些可以使查詢正常工作,但是另一方面,如果沒有這個,我怎麼去阻止攻擊呢? – 2010-09-06 14:28:27

+0

你確定問題出在'mysql_real_escape_string()'上嗎?執行以下操作:'$ b_name = mysql_real_escape_string($ _ POST ['businessName']); echo「Before:」。$ _ POST ['businessName']。「\ nAfter:」。$ b_name;'告訴我們什麼是輸出。 – Hammerite 2010-09-06 14:32:45

+0

我只是將其更改爲addslashes(),它的工作 – 2010-09-06 14:37:12

0

我做了一系列的測試,問題在於mysql_real_escape_string這一行。我刪除了這個,它工作。然而,我仍然需要一些注射保護,所以我添加了addslashes。

我不知道爲什麼它以這種方式行事,我希望我的修復不是暫時的。