过滤/清理表单文本区域会导致 MySQL 插入失败


filtered/sanitised form textarea causes MySQL insert to fail

我正在使用下面准备好的语句通过邮寄方式从表单提交数据用户数据已经过过滤和清理。 使用 PHP 过滤器函数 但是,插入MySQL时插入来自文本区域表单输入的"地址"值失败。 我已经尝试了各种版本的数据,似乎任何带有换行符"'''t''r"的输入以及它们的 HTML 编码等效项都失败了。我不认为这些对 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();

终于找到了问题的根源。 重新键入调用 SP 的线路解决了这个问题。我确实复制和粘贴了很多,所以也许一些杂项的不可打印字符进入了这一行。 这是我唯一能想到的,因为我的重新输入完全相同......