PHP更新MYSQL表单不起作用

3

我试图编辑姓氏(lname)但是没有成功,

我得到了这个错误:

错误:无法执行UPDATE tablename SET fname = '', lname = '' WHERE fname =的更新。您的SQL语法有误,请检查与您的MySQL服务器版本相对应的手册,以获取正确的语法。

<?php
$link = mysqli_connect("IP","DB","PASS (hiden ofc)", "DBN");

// Check connection
if($link === false){
    die("ERROR: Could not connect. " . mysqli_connect_error());
}

// Attempt update query execution
$sql = "UPDATE tablename SET fname = '$nfname', lname = '$nlname' WHERE fname = $fname";
if(mysqli_query($link, $sql)){
    echo "Records were updated successfully.";
} else {
    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);
}

// Close connection
mysqli_close($link);
?>

--- HTML CODE ---

<html>
<body>
<h1>Test editing </h1>
<form action="edit.php" method="post">
OrginalFirstname: <input type="text" name="fname" /><br><br>
Lastname: <input type="text" name="lname" /><br><br>
NewFirstname: <input type="text" name="nfname" /><br><br>
 
<input type="submit" />
</form>
</body>
</html>


如果你只想编辑姓氏,为什么要更新所有字段?那些变量被分配在哪里? - chris85
这只是为了测试目的而完成的,我对此还比较新。 - Jonas
这是你的全部代码吗? - Phiter
只更新需要更新的字段。您还应该使用参数化查询。 - chris85
1个回答

4

你在查询的最后一部分忘记加上撇号了:

$sql = "UPDATE tablename SET fname = '$nfname', lname = '$nlname' WHERE fname = '$fname'";

这应该会起作用。

请确保使用mysqli_real_escape_string转义了所有变量。如果其中一个变量有未转义的单引号,查询将再次失败。

如果您问题中的PHP代码是全部代码,则无法从$_POST[]中获取值。

您可以在代码开头使用extract($_POST);将值存入变量中。


2
我认为问题在于他没有给他使用的变量赋值。 - Tᴀʀᴇǫ Mᴀʜᴍᴏᴏᴅ
啊,我不知道我必须添加它,目前似乎一切正常。非常感谢你!对我的错误感到抱歉。 - Jonas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接