我想將我的 SQL 查詢變成一個準備好的語句,但我意識到這并不像我最初想象的那么容易。這是當前形式的查詢,因此不是準備好的語句。$mysqli = new mysqli(...);$result = mysqli_query( $mysqli,"SELECT count(*) as total from test_users, image_uploads WHERE test_users.APPROVAL = 'granted' AND test_users.NAME = image_uploads.OWNER AND (test_users.IMGAUTO = 'enabled' OR image_uploads.IAPPROVAL = 'granted')");$data = mysqli_fetch_assoc( $result );$row_cnt = $data['total'];$totalPages = ceil(($row_cnt / $cardmax));所以我現在的問題是這個。當我制作準備好的語句時,我將無法再訪問image_uploads.OWNER,因為我目前在查詢中使用它。$grant = 'granted';$owner = ""; //<<--- how to get image_uploads.OWNER$enabl = 'enabled';$sql = "SELECT COUNT(*) FROM test_users, image_uploads WHERE test_users.APPROVAL=? AND test_users.NAME=? AND (test_users.IMGAUTO=? OR image_uploads.IAPPROVAL=?)";$stmt = $mysqli->prepare($sql);$stmt->bind_param('ssss', $grant, $owner, $enabl, $grant);$stmt->execute();$row = $stmt->get_result()->fetch_row();$row_cnt = $row[0];$totalPages = ceil(($row_cnt / $cardmax));有沒有辦法image_uploads.OWNER在我準備好的陳述中得到這個。我該如何正確地做到這一點?
1 回答

喵喵時光機
TA貢獻1846條經驗 獲得超7個贊
它看起來像是image_uploads.OWNER
數據庫中 SQL 表中的一列。如果是這樣,那么您可以將其保留在您的第一個版本中。你不需要參數化它。
只有來自數據庫引擎外部的數據值(例如用戶輸入或來自文件的數據)需要參數化,因為該數據可能是未知的,并且可能包含需要清理的惡意值/注入攻擊。引用另一個表中的列名不會造成這樣的威脅——您沒有將未知的字符串值放入查詢語法中。
注意實際上,您的原始查詢都不依賴于外部輸入或未知變量 - 所有數據都被硬編碼到查詢文本中。因此,您實際上不需要在此特定查詢中對任何內容進行參數化。一切都是預先設置好的,因此不會有意外/未知文本成為可執行 SQL 的一部分的威脅。
- 1 回答
- 0 關注
- 105 瀏覽
添加回答
舉報
0/150
提交
取消