比方說,我有一份聲明,在這種情況下,一個從特定數據庫表中選擇照片信息:使用可變數據的查詢,以取代硬編碼表名
$conn = dbConnect('query');
$bgImage = "SELECT photo_fname
FROM photos_bn
WHERE gallery_id = ?
LIMIT $curPage,".$totalPix;
$stmt = $conn->prepare($bgImage);
$stmt->bind_param('i', $gallery);
$stmt->bind_result($pFname);
$stmt->execute();
$stmt->store_result();
$stmt->fetch();
而且,由於我在我的數據庫中有幾個處理特定照片主題的表格,人們會認爲我需要爲每個表格分別查詢。上面的代碼從表中選擇信息,photos_bn
,但我有其他表格,我們將其稱爲photos_bq
和photos_ps
。
這可能是一個非常明顯的問題,但我該如何去替換一個變量,該變量可以通過查詢字符串或會話變量傳遞給頁面,以便查詢中的表名不會被硬編碼,但是是一個準備好的聲明的一部分?
非常感謝!
謝謝!我想我應該是更具體的......我想要一個解決方案是一個準備好的聲明。我很清楚SQL注入的危險,並且在處理變量時只使用預處理語句。 – wordman 2013-05-02 19:48:29
只是跑過這篇文章,想要更新它。有一個SO文章[這裏](http://stackoverflow.com/questions/11312737/can-i-parameterize-the-table-name-in-a-prepared-statement),說我們不能參數化表名帶有佔位符的查詢。如果表名來自用戶輸入,則首先檢查一張表的白名單,然後回答。所以這是正確的答案! – wordman 2015-01-28 04:30:00