2016-08-02 88 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

现在你编辑了;所以你看到/明白了我的意思。 –