我想實現這個:插入柱變到MySQL根據會話變量
$sql = "INSERT INTO users (location) WHERE social_id='".$_SESSION["FBID"]."' VALUES ('".$_POST["location"]."')";
所以位置值來自於一種形式,但是,顯然需要在哪裏,因爲它需要進入正確的行爲用戶。 這不起作用,也許有人知道連字符是否放錯了位置?
我想實現這個:插入柱變到MySQL根據會話變量
$sql = "INSERT INTO users (location) WHERE social_id='".$_SESSION["FBID"]."' VALUES ('".$_POST["location"]."')";
所以位置值來自於一種形式,但是,顯然需要在哪裏,因爲它需要進入正確的行爲用戶。 這不起作用,也許有人知道連字符是否放錯了位置?
你應該看看這個: MySQL Insert Where query
你不想插入,但更新記錄。您始終插入一整行 - 而不是現有行的單個列。你使用更新。因此插入時不需要使用何處。
Lookking你的問題應該是這樣的
UPDATE users SET location = $_POST["location"] where social_id = $_SESSION["FBID"]
如上你應該註釋中,但是插入之前還是逃脫至少位置變量。
看一看「的mysql準備語句」
感謝您的回覆,它的工作原理。什麼是「逃避」? – ffritz
表示在SQL語句中使用字符串中的特殊字符,並考慮連接的當前字符集。閱讀此鏈接http://php.net/manual/en/mysqli.real-escape-string.php –
在將其插入數據庫之前,您應該先將字符串轉義以防止MySQL注入。分配給變量會更容易。
此外,我認爲你正在嘗試更新行,使用UPDATE查詢,而不是INSERT。
$FBID = mysqli_real_escape_string($conn, $_SESSION["FBID"])
$location = mysqli_real_escape_string($conn, $_POST["location"])
$sql = "UPDATE `users` SET `location` = '$location' WHERE `social_id`='$FBID' ";
請隨時準備好您的查詢,從來沒有使用$ _ POST或任何其它用戶輸入值直接在您的查詢,以防止SQL注入。
SQL注入是比較危險的,那麼你認爲
如果您插入$ _ POST [「所在地」] =「‘’ - 」到@Frank教務長的代碼,那麼你將UPDATE所有行而不是使用FBID會話密鑰的那個。
與SQL注入多個查詢
如果已經啓用了多查詢,則可以插入$ _ POST [「所在地」] =「‘’; DROP TABLE用戶 - 」到@Frank教務長的代碼,然後您將刪除表用戶。
始終使用準備好的語句
你可以看看我的PDO實現的例子在GitHub上: https://github.com/maartensch/database-pdo-mysql-class-php
示例代碼:
$sql = "INSERT INTO yourTablename(id,name) VALUES(:id,:name)";
$userInputId = 'yourUnescapedValue';
$userInputName = 'yourUnescapedValue';
$preparedStatements = array(':id'=>$userInputId,':name'=>$userInputName);
Db::getDb()->query($sql,$preparedStatements);
您確定要插入?你的用戶表只包含一個位置嗎?我想你想要更新嗎?你也不應該直接插入POST變量。首先驗證它不是嘗試從數據庫獲取記錄的一些不良片段。 你也應該把你的位置在聲明的末尾 –
謝謝弗蘭克,就是這樣。是的,我打算在以後檢查,當它工作。 :) – ffritz
開始使用mysqli_prepare語句。 http://php.net/manual/en/mysqli.prepare.php –