提示:這可能看起來很明顯,但您需要修剪字串以使其符合您透過參數化查詢或預存程序儲存它們的資料庫欄位。(例如:僅提交最多 20 個字元到 VARCHAR(20) 資料庫欄位)。如果您將更大的字串傳送到查詢而不是它可以處理的字串,您將收到錯誤訊息。
清理字串時,您很可能會發現自己使用 php substr() 函式。如文件中所述,當出現空字串時,此函式將返回布林值 FALSE。不注意這個布林值 FALSE 將導致在資料庫表格中儲存「0」而不是空字串。
由於修剪輸入也很重要,因此一個簡單直觀的解決方案是修剪 substr() 輸出,這將始終提供空字串,而不是布林值 FALSE。
所以這將永遠有效
<?php
$address_line_2 = trim(substr($_POST['addr2']),0,30));
echo gettype($address_line_2); $sql = "update tblAddressBook set name=(?), addr1=(?), addr2=(?),..."
$params = array($name, $address_line_1, $address_line_2, ...)
$sql_srv_query($db_conn, $sql, $params);
?>
這種方式看似沒問題,但在資料庫中可能會出現意想不到的資料。
<?php
$address_line_2 = substr(trim($_POST['addr2'])),0,30);
echo gettype($address_line_2); $sql = "update tblAddressBook set name=(?), addr1=(?), addr2=(?),..."
$params = array($name, $address_line_1, $address_line_2, ...)
$sql_srv_query($db_conn, $sql, $params);
?>
您也可以使用下列方式將類型強制轉換為字串:
這樣會將布林值 false 轉換回預期的空字串。
<?php
$address_line_2 = (string)substr(trim($_POST['addr2'])),0,30);
echo gettype($address_line_2); $sql = "update tblAddressBook set name=(?), addr1=(?), addr2=(?),..."
$params = array($name, $address_line_1, $address_line_2, ...)
$sql_srv_query($db_conn, $sql, $params);
?>
我直到換成 IIS7、PHP 5.3.8 和 SQL Server 2008 才注意到這個行為。但使用 IIS7、PHP 5.2 和 SQL Server 2008 時也會出現同樣的行為。