我遇到了更新我的MySQL数据的问题,其中包括HTML数据,我不断修复错误;但是,一旦一个错误被修复,它就会产生另一个当前错误如下:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc='Live updates to certain games will also be posted on this website througho' at line 1
我已经在Stack Overflow上捡了将近3天而没有任何确定的答案。所以我希望有人能找到这个!
这是我的PHP表单代码:
if (isset($_POST['submit'])) {
$WName = mysql_prep($_POST['wname']);
$SName = mysql_prep($_POST['sname']);
$Desc = mysql_prep($_POST['desc']);
$LogoURL = mysql_prep($_POST['logourl']);
$aboutPage = mysql_prep($_POST['aboutpage']);
$query = "UPDATE settings SET name='$WName',subName='$SName',desc='$Desc',logoUrl='$LogoURL',about='$aboutPage'";
// $query = mysql_prep($query);
mysql_query($query) or die(mysql_error());
header("Location: settings.php?=success");
}
功能
mysql_prep()可在互联网上找到,即:https://gist.github.com/ZachMoreno/1504031
以下是HTML表单:
<form role="form" action="" method="post">
<!-- text input -->
<div class="form-group">
<label>Website Name</label>
<input type="text" name="wname" class="form-control" placeholder="
<?php echo $row['name']; ?>" value="
<?php echo $row['name']; ?>" />
</div>
<div class="form-group">
<label>Sub Name</label>
<input type="text" name="sname" class="form-control" placeholder="
<?php echo $row['subName']; ?>" value="
<?php echo $row['subName']; ?>" />
</div>
<div class="form-group">
<label>Description</label>
<textarea name="desc" class="form-control" rows="3" placeholder="
<?php echo $row['desc']; ?>" >
<?php echo $row['desc']; ?>
</textarea>
</div>
<div class="form-group">
<label>Logo URL</label>
<input type="text" name="logourl" class="form-control" placeholder="
<?php echo $row['logoUrl']; ?>" value="
<?php echo $row['logoUrl']; ?>" />
</div>
<div class="form-group">
<label>About Page</label>
<textarea class="form-control" name="aboutpage" rows="6" placeholder="
<?php echo $row['about']; ?>">
<?php echo $row['about']; ?>
</textarea>
</div>
<div class="box-footer">
<input type="submit" name="submit" class="btn btn-primary" value="Submit" style="margin-left:-10px;" />
</div>
</form>
非常感谢您提供的任何帮助,我希望这可以解决,我的目标是用它来帮助遇到相同/类似问题的未来访问者。
答案 0 :(得分:1)
不敢相信我之前没有看到这个;我在MySQL中遇到的问题是数据库的列名为'desc',我原本认为它的意思是'描述',但实际上它与关键字'descending'相冲突。这给出了语法错误。
这是我在MySQL文档中找到的内容; 9.3 Keywords and Reserved Words :
关键字是在SQL中具有重要意义的词。某些关键字(如SELECT,DELETE或BIGINT)是保留的,需要特殊处理才能用作表名和列名等标识符。对于内置函数的名称也可能是这样。
在上面的网络链接上,您可以看到不应使用的关键字/保留字列表,或者应包含反斜杠(我不会进入)。
我的解决方案?不要使用保留字作为标识符!
您可以做的最简单的解决方案就是避免使用这些词语。我通过将标识符更改为'description'来阻止使用保留字'desc'。
感谢您的帮助!希望这有助于将来的人们。
答案 1 :(得分:0)
从mysql_prep()函数返回的字符串已转义单引号。 所以.. ..你不能在查询字符串中使用这些作为分隔符。将它们更改为双引号。
$query = "UPDATE settings SET name = \"$WName\",
subName = \"$SName\",
desc = \"$Desc\",
logoUrl = \"$LogoURL\",
about = \"$aboutPage\" ";
你可以试一下只有文字的$testQuery
..
$testQuery = "UPDATE settings SET name = \"ABC\",
subName = \"DEF\",
desc = \"GHI\",
logoUrl = \"JKL\",
about = \"MNO\" ";
另外,您缺少WHERE
子句,或者只有1行?