SQL语法错误:更新查询

时间:2019-01-06 08:46:43

标签: php mysql

我是PHP的初学者,我正在个人资料页面上工作。当前的问题是更改名称(这是我要更改名称的试用页)。由于某种原因,我收到错误消息:

  

您的SQL语法有错误;请查看与您的MariaDB服务器版本相对应的手册,以获取在第1行的'lastName ='Lname'WHERE email ='qwerty@example.com'附近使用的正确语法。

<?php
	include('server.php');
	$db = mysqli_connect('localhost','root','','userdata');
	$query = "SELECT * FROM data WHERE email = '".$_SESSION['username']."'";
	$result = mysqli_query($db,$query);
	$data = mysqli_fetch_assoc($result);
?>
<html>	
	<head>	
		<title>Profile</title>		
	</head>
	<body>
		<form method="POST" action="">	
			<p>First name: <input type="text" name="fname" value="<?php echo htmlspecialchars($data['firstName']); ?>" > </p>
			<p>Last name: <input type="text" name="lname" value="<?php echo htmlspecialchars($data['lastName']); ?>"> </p>
			<p><input type="Submit" name="confirm" value="Confirm"></p>
		</form>
		<?php
			if(isset($_POST['confirm']))
			{
				$db = mysqli_connect('localhost','root','','userdata');
				$query = "UPDATE data SET firstName ='".$_POST['fname']."' lastName ='".$_POST['lname']."'  WHERE email ='".$_SESSION['username']."'";
				mysqli_query($db,$query);
				echo mysqli_error($db); //For checking error.Remove afterwords.
			}
		?>
		<p><a href="homepage.php">HOMEPAGE</a></p>
	</body>	
</html>

server.php是我管理整个操作后端的页面,因此它不参与此操作。第一个PHP块从表中获取数据。 HTML块创建一个表单,用户可以在其中编辑数据。 PHP块应将数据更新到表中。

我将不胜感激任何进一步改善我的页面的技巧,因为我对此还不熟悉。预先感谢

更新:-向查询添加,仍然不会改变情况。

4 个答案:

答案 0 :(得分:1)

您的sql语句中有错误(如错误消息所提示)。在mysql中,错误消息通常会指出发生错误的确切位置,并且通常会引用导致问题的第一个字符/单词。

在您的情况下为lastname。到目前为止,您的更新查询是:

UPDATE data SET firstName ='fname' lastName ='Lname' WHERE email ='qwerty@example.com'
--                                 ^ error occured here

当您查找UPDATE查询的样子(mysql文档)时,必须用逗号分隔不同的更新字段:

UPDATE data SET firstName ='fname', lastName ='Lname' WHERE email ='qwerty@example.com'
--                                ^ add this here

此外,您容易受到sql注入的攻击(请仔细阅读它们以及如何防止它们-这是通过准备好的语句完成的)

答案 1 :(得分:0)

请尝试这样做(您的SQL查询中缺少逗号)。

$query = "UPDATE data SET firstName ='".$_POST['fname']."', lastName ='".$_POST['lname']."'  WHERE email ='".$_SESSION['username']."'";

答案 2 :(得分:0)

使用对sql注入开放的代码的另一个问题是,您可以轻松地从输入端更改sql语句的语法。例如,如果您输入的姓氏为“ O'connor”,则更改语法。尝试使用echo $query,然后分析输出或更佳的结果,将其复制并直接运行而不使用php

答案 3 :(得分:-1)

如评论中所述。更新多个字段时,您需要用逗号分隔它们:

UPDATE data 
set 
field1="meh", /* <-- comma */
field2="foo" 
where otherField="something"