2016-02-12 71 views
0

我正在使用以下準備好的語句通過帖子 從表單提交數據,用戶數據已被過濾和消毒。使用PHP過濾函數然而,插入到MySQL中插入來自文本區域表單輸入的「地址」值失敗。我試過了各種版本的數據,似乎任何帶有換行符「\ n \ t \ r」的輸入都會失敗,以及它們的HTML編碼等效。我不認爲這些對於MySQL來說是可能的嗎?我錯過了明顯嗎?已過濾/已過濾的表單textarea導致MySQL插入失敗

感謝 PS如下:

// DB_Connection

  $SP1 = 'call account_register(:Title, :Name, :Surname, :Email, :Mobile, :Password, :Status, :LoginIP, :Token, :TokenExpiry, :Company, :BuildingNumber, :Address, :Street, :City, :County, :PostCode, :ReturnStatus)'; 
      $Statement = $DBConnection->prepare($SP1); 
      #Bind parameters 
      $Statement->bindParam(':Title', $_UserData['Title'], PDO::PARAM_STR); 
      $Statement->bindParam(':Name', $_UserData['Name'], PDO::PARAM_STR); 
      $Statement->bindParam(':Surname', $_UserData['Surname'], PDO::PARAM_STR); 
      $Statement->bindParam(':Email', $_UserData['Email'], PDO::PARAM_STR); 
      $Statement->bindParam(':Mobile', $_UserData['Mobile'], PDO::PARAM_STR); 
      $Statement->bindParam(':Password', $_UserData['Password'], PDO::PARAM_LOB); 
      $Statement->bindParam(':Status', $_UserData['UserStatus'], PDO::PARAM_INT); 
      $Statement->bindParam(':LoginIP', $_UserData['LoginIP'], PDO::PARAM_STR); 
      $Statement->bindParam(':Token', $_UserData['ActivationToken'], PDO::PARAM_LOB); 
      $Statement->bindParam(':TokenExpiry', $_UserData['TokenExpiry'], PDO::PARAM_STR); 
      $Statement->bindParam(':Company', $_UserData['Company'], PDO::PARAM_STR); 
      $Statement->bindParam(':BuildingNumber', $_UserData['BuildingNumber'], PDO::PARAM_STR); 
      //$Statement->bindParam(':Address', $_UserData['Address'], PDO::PARAM_STR); 
      //$Address = 'line 1
line 2'; //This is the value of $_USERData after using FILTER_SANITIZE_SPECIAL_CHARS insert fails 
      //$Address = 'Line 1'; //after changing the value of the $_UserData to this the insert is successful 
      //$Address = 'line 1
line 2'; //After extracting from the $_UserData This fails 
      $Address = 'Line 1 
      line 2 
      line 3'; //This fails. I thought newlines were ok? 
      $Statement->bindParam(':Address', $Address, PDO::PARAM_STR); 
      $Statement->bindParam(':Street', $_UserData['Street'], PDO::PARAM_STR); 
      $Statement->bindParam(':City', $_UserData['City'], PDO::PARAM_STR); 
      $Statement->bindParam(':County', $_UserData['County'], PDO::PARAM_STR); 
      $Statement->bindParam(':PostCode', $_UserData['PostCode'], PDO::PARAM_STR); 
      $ReturnStatus = null; //Return variable for SP must be defined 
      $Statement->bindParam(':ReturnStatus', $ReturnStatus, PDO::PARAM_INT | PDO::PARAM_INPUT_OUTPUT, 1); 
      $Statement->execute(); 
+0

這會產生什麼特定的mysql錯誤? –

+0

它不會生成一個錯誤,以便說它作爲其調用存儲過程。 但是SP應該填充的表失敗並且沒有數據。 但是,如果我手動加載「地址」列的數據,可以從我的帖子看到它的作品完美。它似乎在非字母數字字符和換行符上失敗... –

回答

0

嘛終於抓住了問題的底部。重新打電話給SP的線路解決了它。 我會複製和粘貼很多,所以也許有一些雜項不可打印的字符在該行中。這是我能想到的唯一的事情,因爲我的重新輸入是完全一樣的......