2013-05-09 96 views
0

我是新來的PHP編碼出於某種原因,我的代碼沒有插入任何東西到表中。 我一直在解決這個問題幾個小時,我根本找不到它。PHP的SQL插入不工作

我使用PHP我的管理員,我用它來生成一個PHP腳本(不是當前版本的代碼),但仍然沒有奏效。

<? 

//data 

$ID = $_GET['ID']; 
$Type = $_GET['Type']; 
$Name = $_GET['Name']; 
$Addr = $_GET['Addr']; 
$Phone = $_GET['Phone']; 
$startDate = $_GET['startDate']; 
$endDate = $_GET['endDate']; 
$SRN = $_GET['SRN']; 

//sql info 
$user = $_GET['user']; 
$pass = $_GET['pass']; 

echo " 

Hostname: $ID 
Dev_Type: $Type 
User_Name: $Name 
User_addr: $Addr 
User_Phone: $Phone 
DATE_START: $startDate 
Date_END: $endDate 
Square Recipt Number: $SRN 

"; 



// sql insert 

$con=mysqli_connect("mysql1098.servage.net",$user,$pass,"RC_DB"); 

mysqli_query($con,"INSERT INTO RC_DB.Current_Rentals (Hostname,Dev_Type,User_Name,User_Addr,User_Phone,Date_Start,Date_End,STOLEN,Square_Recipt_Number) 
VALUES ($ID,$Type,$Name,$Addr,$Phone,$startDate,$endDate,'0',$SRN)"); 

mysqli_close($con); 

?> 

什麼想法?

+1

我想指出你的代碼是非常危險的,等待發生的災難。你直接將'$ _GET'參數傳遞給數據庫(甚至你的數據庫憑證是'$ _GET'參數,這是一個很大的否定!)。正如@Joe已經在他的回答中指出的,這段代碼可以啓用SQL注入。爲了更好地理解風險以及防止出現這種情況的其他(更好的)技術,您應該真正聽取他的建議以使用'mysqli_real_escape_string'或閱讀[此問題](http://stackoverflow.com/q/60174/813718)。 – 2013-05-09 22:58:40

回答

2

你需要在文本項目周圍有撇號。這在過去也讓我感到困惑。你不是將你的參數添加到函數中,而是引用將傳遞給mysql的文本。所以,$ Name應該是'$ Name'。嘗試類似如下的內容:

mysqli_query($con, "INSERT INTO RC_DB.Current_Rentals 
(Hostname,Dev_Type,User_Name,User_Addr,User_Phone,Date_Start,Date_End,STOLEN,Square_Recipt_Number) 
VALUES ('$ID','$Type','$Name','$Addr','$Phone','$startDate','$endDate','0','$SRN')"); 

編輯: 我通常解決PHP SQL語句的方法是呼應文本,然後嘗試運行在phpMyAdmin的代碼。 phpMyAdmin通常會給出比PHP更好的錯誤消息。

var $text = "INSERT INTO ... (...) VALUES ('$ID', '$Type'...)"; 
echo $text; 

後工作正常,那麼你可以將此文本變量添加到您的通話mysqli_query,看看是否可行。

var $text = "INSERT INTO ... (...) VALUES ('$ID', '$Type'...)"; 
mysqli_query($con, $text); 
0

你可能需要換你插入的值用雙引號或者通過他們與mysqli_real_escape_string

mysqli_query($con,"INSERT INTO RC_DB.Current_Rentals (Hostname,Dev_Type,User_Name,User_Addr,User_Phone,Date_Start,Date_End,STOLEN,Square_Recipt_Number) VALUES (\"$ID\",\"$Type\",\"$Name\",\"$Addr\",\"$Phone\",\"$startDate\",\"$endDate\",'0',\"$SRN\")")

雖然mysqli_real_escape_string是更好,因爲它可以保護SQL注入更多。

編輯:根據Remco的第二條評論,請參閱this example以獲取正確的方法。

+0

...我很抱歉,我是一個總noob不會那混亂的PHP變量? – 2013-05-09 22:31:56

+0

單引號可以做得很好,而且鍵入的工作量也會減少很多。 – 2013-05-09 22:32:50

+0

afaik單引號會混淆變量,即您將插入文字字符$ ID而不是$ ID等號的數字。 – 2013-05-09 22:35:42