3 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
將變量添加到SQL查詢中的最防錯(cuò)的方法是通過準(zhǔn)備好的語句添加變量。
因此,對于您運(yùn)行的每個(gè)查詢,如果至少要使用一個(gè)變量,則必須用占位符替換它,然后準(zhǔn)備查詢,然后執(zhí)行它,并分別傳遞變量。
首先,您必須更改查詢,在變量中添加占位符。您的查詢將變?yōu)椋?/p>
$sql = "INSERT INTO users (fname, lname) VALUES (?, ?)";
然后,您將必須準(zhǔn)備它,綁定變量并執(zhí)行:
$stmt = mysqli_prepare($conn, $sql);
mysqli_stmt_bind_param($stmt, "ss", $fname, $lname);
mysqli_stmt_execute($stmt);
如您所見,這只是三個(gè)簡單的命令:
prepare()您使用占位符發(fā)送查詢的位置
在bind_param中,您發(fā)送帶有類型的字符串(“ s”用于字符串,并且可以將其實(shí)際用于任何類型),而不是實(shí)際變量。
和execute()
這樣,您始終可以確保添加到查詢中的數(shù)據(jù)不會引起單個(gè)SQL語法錯(cuò)誤!另外,此代碼還可以防止SQL注入!
理解僅在變量周圍加上引號是不夠的,這將非常重要,并最終會導(dǎo)致無數(shù)問題,從語法錯(cuò)誤到SQL注入。另一方面,由于預(yù)準(zhǔn)備語句的本質(zhì),它是一種防彈解決方案,無法通過數(shù)據(jù)變量引入任何問題。

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
您的查詢將缺少值(..'$email','$fname'.."
)的引號。但是您很容易使用SQL注入。將準(zhǔn)備好的語句與參數(shù)化查詢一起使用
添加回答
舉報(bào)