我知道很多人偶爾也會遇到相同的錯誤,但是我已經查看了所有先前的答案和我的代碼,并且嘗試了使用col和不使用反引號。這是我目前嘗試使用的代碼$var,$var但同樣if(!empty($_POST['email'])){ $date = date('dmY'); #Todays Date $ip = str_replace('.','',$_SERVER['REMOTE_ADDR']); #Visitor IP $verify = md5($date.$ip); #MD5 ENCRYPT THE 2 VALUES $fname = $_POST['fname']; $lname = $_POST['lname']; $email = $_POST['email']; $password = md5($_POST['password']); $link = mysqli_connect($dbh,$dbu, $dbp, $dbn); $query = mysqli_query($link, "INSERT INTO `users` (`email`,`fname`,`lname`,`verify`,`password`,`joined`)VALUES($email,$fname,$lname,$verify,$password,$date)"); if($query){ echo "inserted"; } else { echo mysqli_error($link); }該表中還有其他列,但是只有上面的我想為其余部分添加數據的列可以最初使用默認值我一直在看這段代碼很久了,現在我才發現問題,我知道這很愚蠢
3 回答

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