2013-08-06 80 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您的错误信息是否更改? –