2015-02-08 98 views
-1

您好我有以下查詢使用CONCAT:如何在更新查詢

$sql = "update zzz_users set password = "'".$encrypted."' where username = '".$email."'"; 
CustomQuery($sql); 

而我只是不能得到CONCAT正確的,可能有人請告訴我該怎麼辦呢

+1

無法看到你在哪裏使用concat? – Mihai 2015-02-08 18:25:57

回答

0

正確的查詢是:

$sql = "update zzz_users set password = '" . $encrypted . "' where username = '" . $email . "'"; 
+0

正確的查詢沒有這個''「。$ encrypted。」「,而不是它應該準備查詢。 – VeeeneX 2015-02-08 18:29:10

+1

@VeeeneX:問題是關於PHP語法,我們不知道'CustomQuery'函數做了什麼以及變量是什麼。在'$ ecnrypted'中可以轉義和散列密碼,那麼一切都會好起來的。 – panther 2015-02-08 18:31:34

+0

永遠不要相信用戶功能。 – VeeeneX 2015-02-08 18:35:04

-1

有一個"password =後太多。在將它寫入數據庫之前,應該先將字符串轉義出來,否則可能會導致SQL注入問題。

$sql = "update zzz_users set password = '" .mysql_real_escape_string($encrypted). "' where username = '" .mysql_real_escape_string($email). "'"; 
CustomQuery($sql); 
+1

Passowrd必須被散列,'_real_escape_string'不是正確的方法(它可能在這個var中被散列,我們不知道)。 'Mysql'擴展名已被棄用。 – panther 2015-02-08 18:33:17

0

這裏還有很多錯誤比沒有獲得連接權。

首先,如果你只是試圖把變量到PHP中的字符串,可以考慮使用雙引號,並直接把變量到字符串:

$sql = "UPDATE `zzz_users` SET `password` = $encrypted WHERE `username` = $email"; 

沒有必要對所有的起點並在這種情況下停止串。

但是,由於SQL Injection attacks,你在這裏做的事情是非常危險的。您應該肯定不是將變量直接放入您的SQL命令。

這樣做的最好方法是使用知道如何接受格式化字​​符串併爲您創建安全SQL的庫。例如,像MeerkoDB會讓你寫這SQL說法是這樣的:

DB::query("UPDATE `zzz_users` SET `password`=%s WHERE `username`=%s", $encrypted, $email); 

這實際上是安全的,因爲這將確保SQL是正確轉義,防止SQL注入攻擊。當然,你可以推出自己的逃跑遊戲,但使用一個完善的圖書館(有許多免費/開源和商業/專有產品)幾乎總是一個更好的主意。

+0

請閱讀豹的回答和意見。 – VeeeneX 2015-02-08 19:02:16