這是後形式:PHP PDO bindParam型管理
$funcname->name= htmlentities($_POST['name']);
$funcname->insert();
這將是對類funcname的的功能插件,該插件將數據插入到名爲名稱列
$this->conn->beginTransaction();
$stmt = $this->conn->prepare("INSERT INTO nameTBL (name) values (:name)";
$stmt->bindParam(':name', $this->name, PDO::PARAM_INT);
if ($stmt->execute()) {
$this->conn->commit(); //This will save your changes
$this->conn->exec('UNLOCK TABLES ' . self::$table_name);
header('Location: ../');
exit();
} else {
$this->conn->rollBack(); //This will undo your changes
$this->conn->exec('UNLOCK TABLES ' . self::$table_name);
header('Location: ../');
exit();
}
現在問題是我已經設置PDO :: PARAM_INT哪些不應該允許字符,但只有整數爲什麼我能夠發佈文本到數據庫(表)?
是否有任何我可以高度限制bindParam的數據類型在這裏。
在此先感謝。
親愛的,但與bindParam我沒有得到任何錯誤,只是文本值進入數據庫,即使MySQL列的類型是文本在這裏它不應該執行該語句,因爲我已經設置PDO類型爲int。所以你的意思是我應該使用bindValue,哪一個更好更安全,或者兩者都是相同的? – user3286490
'bindValue'和'bindParam'是不一樣的。兩者同樣「安全」,並且都將清理輸入以插入查詢。兩者都有類似的功能簽名。在你的情況下,你可以簡單地用'bindValue'切換'bindParam'。這兩個函數以不同的方式處理** 2nd **參數。如果你只做簡單的查詢(如果你從不調用存儲過程),那麼使用'bindValue'。如果該列是文本類型,則不要**使用「PDO :: PARAM_INT」。這不是它的工作原理,也不是爲了這個目的。如果你想要一個整數,在php中執行強制轉換(使用'(int)$ variable')。 –
與$ stmt-> bindValue(':name',$ this-> name,PDO :: PARAM_INT); ,,,當我插入文本時,它會插入(0),而不是..?好嗎? – user3286490