2016-08-02 122 views
0

我試圖執行以下查詢來更新表中的記錄。PHP MySQL更新查詢失敗

require "conn.php"; 

$user_name = $_POST["username"]; 
$code = $_POST["code"]; 
$name = $_POST["groupname"]; 

echo "$user_name, $code, $name"; 

$sql_update = "UPDATE users SET group = '$name' WHERE username = '$user_name'"; 

if ($conn->query($sql_update) === TRUE) { 
echo "success"; 
} 
else { 
echo "fail"; 
} 

查詢失敗,我不知道爲什麼。連接完成後,我可以回顯用戶名代碼和名稱。有沒有理由不工作?

+0

什麼類'$ conn'的實例?而且,你知道這個代碼容易受到SQL注入嗎? –

+0

通常,至少PDO的' - > query'返回'false'或結果集,但* never *'true'。所以這可能是這裏的簡單錯誤......(我相信mysqli也是這樣)。此外,在失敗的情況下,您可以(僅用於調試目的和devel)'echo $ conn-> error'(mysqli)或'print_r($ conn-> errorInfo())'(PDO)。這就是說,**請使用準備好的語句!** – Jakumi

+0

$ conn是我的public_html文件夾中的另一個文件,它只定義了數據庫名稱,用戶名,密碼和服務器名稱。這是我第一次使用PHP,我不熟悉注射安全。我不知道我是否應該關心他們,如果它是一個非常基本的應用程序,我可能不會發布它。 –

回答

0

你的代碼是不是在這個代碼和預處理語句

require_once("conn.php"); 
$user_name = $conn->real_escape_string($_POST["username"]); 
$code = $conn->real_escape_string($_POST["code"]); 
$name = $conn->real_escape_string($_POST["groupname"]); 
$sql_update = $conn->prepare("update `users` set `group` = ? where `username` = ?"); 
$sql_update->bind_param("ss",$name,$user_name); 
$sql_update->execute(); 
$sql_update->close(); 
$conn->close(); 

而且conn.php文件安全

看應該是這樣的

$config = parse_ini_file('config.ini'); // Connection infos. 
$conn = mysqli_connect('localhost',$config['username'],$config['password'],$config['db_name']); 
if($conn === false) { 
die("Something was wrong ! Please try again later."); // Error if connection not ok. 
} 
$conn->set_charset("utf8"); 

創建的public_html文件夾以外的文件命名config.ini寫連接數據

[db_connection] 
username = username 
password = password 
db_name = dbname 

該函數將參數綁定到SQL查詢並告訴數據庫參數是什麼。 「sss」參數列出參數所屬的數據類型。 s字符告訴mysql該參數是一個字符串。

參數可以爲四種類型之一:

i - integer 
d - double 
s - string 
b - BLOB 

瞭解更多here

+1

你甚至測試過這個代碼嗎?查詢中有一個主要的語法錯誤。另外,對OP代碼的簡單修正是爲了避免它們的列名,作爲一個保留的MySQL字;這是真正的問題。 –

+0

是的,我測試這個代碼,它的工作原理 我的代碼有什麼問題? –

+1

現在你編輯了;所以你看到/明白了我的意思。 –