2013-08-06 108 views
-1

我有用戶輸入從窗體進來(可能的空字段 - 是的,數據庫設置爲空值),我需要插入信息到一個數據庫中的表。插入查詢通過PHP不更新MySQL數據庫

只是一些更多的信息:我在鈦

進行申請這是將所有的參數到PHP文件中的代碼:

saveButton.addEventListener('click', function() { 

    var xhr = Ti.Network.createHTTPClient(); 
    var url = ""; //url is in here; I just took it out for privacy 
    xhr.open("GET", url); 
    var params = { 
     query : "enterAsset", 
     barcode : barcodeTextField.value, //all these textfields are editable by the user 
     assetClass : assetClassTextField.value, 
     manufacturer : manufacturerTextField.value, 
     model : modelTextField.value, 
     serialNum : serialNumTextField.value, 
     custodian : custodianTextField.value, 
     status : statusTextField.value, 
     loginName : LOGIN_NAME, 
     divisionID : DIVISION_ID, 
     dateBuy : dateBoughtTextField.value, 
     priceBuy : priceTextField.value, 
     dateInSvc : dateInServiceTextField.value, 
     dateLastSvc : dateLastServiceTextField.value, 
    }; 
    xhr.onload = function() { 
     alert("Successful entry"); //this alert does appear when the button is pressed 
    }; 
    xhr.send(params); 
}); 

這是PHP文件中的代碼

$query = $_GET['query']; 

switch($query) { //this switch statement exists so we can access the database for multiple queries from the same .php file. We know it works because the "login" query works just fine. 
    case "data": 
     //unimportant stuff is in here 
     break; 
    case "clients": 
     //more irrelevant stuff in here 
     break; 
    case "login": //this works, but it's not trying to insert anything 
     $username = $_GET['username']; 
     $password = $_GET['password']; 
     $stmt4 = $con->prepare('CALL Get_user_auth(:username,:password)'); 
     $stmt4->bindParam(':username',$username,PDO::PARAM_STR); 
     $stmt4->bindParam(':password',$password,PDO::PARAM_STR); 
     $stmt4->execute(); 
       $results = $stmt4->fetchAll(PDO::FETCH_ASSOC); 
     $stmt4->closeCursor(); 
     break; 
    case "search": 
     //more irrelevant stuff in here 
     break; 
    case "enterAsset": 
     $barcode = '12345'; 
     $assetClass = 'test'; 
     $manufacturer = 'test'; 
     $model = 'test'; 
     $serialNum = 'test'; 
     $custodian = 'test'; 
     $locationID = '1'; 
     $status = 'test'; 
     $dateBuy = 'test'; 
     $priceBuy = 'test'; 
     $dateInSvc = 'test'; 
     $dateLastSvc = 'test'; 
     $loginName = 'jane'; 
     $divisionID = '1'; 

     $stmt6 = $con->prepare('CALL Enter_new_asset(:divisionID,:barcode,:assetClass,:manufacturer,:model,:serialNum,:custodian,:status,:locationID,:dateBuy,:priceBuy,:dateInSvc,:dateLastSvc,:loginName)'); 
     $stmt6->bindParam(':divisionID',$divisionID,PDO::PARAM_INT,11); 
     $stmt6->bindParam(':barcode',$barcode,PDO::PARAM_STR,128); 
     $stmt6->bindParam(':assetClass',$assetClass,PDO::PARAM_STR,10); 
     $stmt6->bindParam(':manufacturer',$manufacturer,PDO::PARAM_STR,10); 
     $stmt6->bindParam(':model',$model,PDO::PARAM_STR,10); 
     $stmt6->bindParam(':serialNum',$serialNum,PDO::PARAM_STR,20); 
     $stmt6->bindParam(':custodian',$custodian,PDO::PARAM_STR,20); 
     $stmt6->bindParam(':status',$status,PDO::PARAM_STR,10); 
     $stmt6->bindParam(':locationID',$locationID,PDO::PARAM_INT,11); 
     $stmt6->bindParam(':dateBuy',$dateBuy,PDO::PARAM_STR,13); 
     $stmt6->bindParam(':priceBuy',$priceBuy,PDO::PARAM_STR,10); 
     $stmt6->bindParam(':dateInSvc',$dateInSvc,PDO::PARAM_STR,13); 
     $stmt6->bindParam(':dateLastSvc',$dateLastSvc,PDO::PARAM_STR,13); 
     $stmt6->bindParam(':loginName',$loginName,PDO::PARAM_STR,20); 

     $stmt6->execute(); 
     $stmt6->closeCursor(); 
     break; 
    default: 
     $results = "FAIL."; 
     break; 
} 

這將返回「空」當我指定的「enterAsset」查詢,這是預期的,因爲它不應該返回任何東西:連接到數據庫後。

爲Enter_new_asset存儲的查詢是:

INSERT INTO TBL_ASSET_DATA (Division_ID, Barcode_Tag, Asset_Class, Manufacturer, Model, Serial_Num, Custodian, Status, Location_ID, Date_buy, Price_buy, Date_in_svc, Date_last_svc, Updated_by) 
VALUES(divisionID,barcode, assetClass, manufacturer, model, serialNum, custodian, status, locationID, dateBuy, priceBuy, dateInSvc, dateLastSvc, loginName) 

編輯:我試着在硬編碼爲變量的一些值,現在我得到這個錯誤:解析錯誤:語法錯誤,意外' ;」 (T_CONSTANT_ENCAPSED_STRING)在/homepages/21/d265224452/htdocs/brillient_wordpress/AMproxy.php在線90

這是在90行的代碼:

$stmt6 = $con->prepare('CALL Enter_new_asset(:divisionID,:barcode,:assetClass,:manufacturer,:model,:serialNum,:custodian,:status,:locationID,:dateBuy,:priceBuy,:dateInSvc,:dateLastSvc,:loginName)'); 

我的問題是:爲什麼數據庫沒有更新與輸入的信息?一個新條目不會出現在TBL_ASSET_DATA中。這個問題的其他問題似乎是使用MySQLi或不推薦的mysql命令,並且這是使用PDO。

非常感謝您的幫助。

編輯我得到了我的數據庫通過更換

$stmt6 = $con->prepare('CALL Enter_new_asset(:divisionID,:barcode,:assetClass,:manufacturer,:model,:serialNum,:custodian,:status,:locationID,:dateBuy,:priceBuy,:dateInSvc,:dateLastSvc,:loginName)'); 

更新:

$sql = "INSERT INTO TBL_ASSET_DATA(Division_ID, Barcode_Tag, Asset_Class, Manufacturer, Model, Serial_Num, Custodian, Status, Location_ID, Date_buy, Price_buy, Date_in_svc, Date_last_svc, Updated_by) VALUES(:divisionID,:barcode, :assetClass, :manufacturer, :model, :serialNum, :custodian, :status, :locationID, :dateBuy, :priceBuy, :dateInSvc, :dateLastSvc, :loginName)"; 
$stmt6 = $con->prepare($sql); 

但我不知道這是否是安全的。

+0

您是否從PDO收到任何錯誤? –

+0

您不需要執行數組參數 - 這就是bindParam位的用途。 – noz

+0

我可以看到沒有來自PDO的錯誤。 我擺脫了數組參數,它仍然沒有更新數據庫。 – thefreakyorange

回答

0

你似乎缺少一個報價在這裏關閉字符串:

$dateLastSvc = 'test; 

這是使你的代碼出現錯誤的行爲。如果使用帶有上下文高亮顯示的編輯器,則可以輕鬆地選擇美國錯字錯誤。例如,我可以立即看到突出顯示Stack Overflow所做的事情。

+0

感謝您的輸入,但即使在更正我的數據庫未更新之後。 – thefreakyorange

+0

@ user2657636您的錯誤信息是否更改? –