由於PDOStatement::
執行文檔中說,「所有的值都爲PDO::PARAM_STR
處理 所以我有以下問題綁定值和參數在PDO預處理語句:PHP
1)假設我有一個變量$_SESSION['id']=2
和查詢
$sql='select * from articles where id=?';
$query=$con->prepare($sql);
$query->execute(array($_SESSION['id']));
當我執行語句,它成功地執行。 這意味着它作爲一個整數.Does它做自動注入或違反該文件的語句將變量?
2)Suppse我有另一個查詢
select * from articles where id=? and category=?
現在,這裏第一個參數是int
和最後一個參數是string
所以當我綁定參數$query->bindValue(2, $_GET['category'],PDO::PARAM_STR);
做我需要指定PDO::PARAM_STR
或者我可以依靠的默認實現,它默認情況下視爲string
,如文檔所述。 3)我想從$_GET['category']
到查詢中指定表名,但是我得到了以下格式的字符串(注意引用表名),從而導致SQL error.How我可以糾正它嗎?
select * from 'article'...........
在最後一個問題我想動態改變表名,其中我通過獲取'GET'.Isn't有什麼辦法來創建動態表名這樣的查詢。這就是最後一個問題 –
的目的,你必須這麼做:'「SELECT * FROM $ table ...」'。您必須保留*允許的表名稱*白名單*!在以這種方式將查詢插入查詢之前,檢查「$ table」是否是一些允許的值之一。 – deceze
@InsaneCoder如果你需要的話,這意味着你的數據庫設計是*瘋狂*,你最好使它*正常* –