亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mysqli插入錯誤語法不正確

mysqli插入錯誤語法不正確

RISEBY 2019-11-04 10:56:47
我知道很多人偶爾也會遇到相同的錯誤,但是我已經查看了所有先前的答案和我的代碼,并且嘗試了使用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注入。另一方面,由于預準備語句的本質,它是一種防彈解決方案,無法通過數據變量引入任何問題。


查看完整回答
反對 回復 2019-11-04
?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

您的查詢缺少值(..'$email','$fname'..")的引號。但是您很容易使用SQL注入。將準備好的語句與參數化查詢一起使用 

查看完整回答
反對 回復 2019-11-04
  • 3 回答
  • 0 關注
  • 464 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號