我想將我的 SQL 查詢變成一個(gè)準(zhǔn)備好的語句,但我意識到這并不像我最初想象的那么容易。這是當(dāng)前形式的查詢,因此不是準(zhǔn)備好的語句。$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));所以我現(xiàn)在的問題是這個(gè)。當(dāng)我制作準(zhǔn)備好的語句時(shí),我將無法再訪問image_uploads.OWNER,因?yàn)槲夷壳霸诓樵冎惺褂盟?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在我準(zhǔn)備好的陳述中得到這個(gè)。我該如何正確地做到這一點(diǎn)?
1 回答

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