簡體   English   中英

使用bindvalue准備語句而不是bindindg

[英]Prepare statement not bindindg with bindvalue

我剛剛開始使用PDO,沒有那么多經驗,但我最近遇到了一個惱人的問題。

我試圖使用bindValue與fetch語句從數據庫中檢索信息。 我得到的變量來自上一頁的GET。 一切都進行得很順利,除了它沒有為bindValue之一分配一個正確的值。

PDO:

$stmt = $dbconnect->prepare('SELECT * FROM :table WHERE id=:id');

$stmt->bindValue(':table', $table);
$stmt->bindValue(':id', $id);

$stmt->execute();
$row = $stmt->fetch();

我知道bindValue和bindParam之間的區別。 當我對表值進行硬編碼時,代碼工作正常。 我現在一直在牆上撞了一小會兒,但我似乎無法弄明白。 任何人都可以給我正確的語法,請解釋我的想法出了什么問題,因為在這一點上我想不出一個理由,除了可能誤解字符串值,為什么會出錯。

同樣在將來我想知道SQL命令的確切內容。 我試過這樣做:

$SQL = 'SELECT * FROM :table WHERE id=:id';
$stmt = $dbconnect->prepare($SQL);

$stmt->bindValue(':table', $table);
$stmt->bindValue(':id', $id);

$stmt->execute();
$row = $stmt->fetch();

但是這不會將變量值綁定到SQL變量。 非常感謝您的幫助!

編輯:我注意到我的帖子與FAQ帖子重復: FAQ 所以我的問題已得到解答,但我對PDO的見解還不足以應對。 任何人都可以解釋下一行代碼會發生什么,以及為什么這樣做,從發布的鏈接中獲取!

$field = "`".str_replace("`","``",$field)."`";
$sql   = "SELECT * FROM t ORDER BY $field";

回答感謝silkfire,我想出了解決方法。 在插入SQL字符串之前,只需將字符串內容添加到SQL字符串中:

$SQL = 'SELECT * FROM '.$table.' WHERE id=:id';

PDO不允許表名或列名作為占位符。 只需使用連接創建查詢,但請確保用戶僅提供有效值。 這應該是安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM