包含关键字/保留词的PHP MySQL查询[重复]
Posted
技术标签:
【中文标题】包含关键字/保留词的PHP MySQL查询[重复]【英文标题】:PHP MySQL query containing keywords/reserved words [duplicate] 【发布时间】:2016-02-02 02:23:54 【问题描述】:我在更新包含 html 数据的 mysql 数据时遇到了问题,我不断修复错误;但是,一旦一个错误得到修复,它就会给出另一个错误。当前错误如下:
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>
非常感谢您提供的任何帮助,我希望可以解决这个问题,我的目标是帮助未来遇到相同/类似问题的访问者。
【问题讨论】:
应该使用 mysqli_ 函数和 mysqli_real_escape_string() 函数,而不是旧的、已弃用的 mysql_ 函数。 你能var_dump($query)
并发布结果
使用htmlspecialchars()
和mysqli_real_escape_string()
怎么样?
不幸的是,这个项目被要求使用旧的不推荐使用的 MySQL。 @MaggsWeb,我现在就这样做。
【参考方案1】:
不敢相信我之前没有看到这个;我对 MySQL 的问题是数据库有列名“desc”,我最初认为它表示“description”,但实际上它与关键字“descending”冲突。这给出了语法错误。
这是我在 MySQL 文档中找到的; 9.3 Keywords and Reserved Words :
关键字是在 SQL 中具有重要意义的词。某些关键字(例如 SELECT、DELETE 或 BIGINT)是保留的,需要特殊处理才能用作标识符,例如表名和列名。内置函数的名称也可能如此。
在上面的网页链接上,您可以看到不应使用或应包含反斜杠(我不会详细介绍)的关键字/保留字列表。
我的解决方案?不要使用保留字作为标识符!
您可以做的最简单的解决方案是简单地避免使用这些词。我通过将标识符更改为“描述”来阻止使用保留字“描述”。
感谢您的所有帮助!希望这对未来的人们有所帮助。
【讨论】:
【参考方案2】:从您的 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 行?
【讨论】:
“解析错误:语法错误,意外的 '$WName' (T_VARIABLE) in...”在 $query 行上。 好的,试试转义双引号 "您的 SQL 语法有错误;....... near 'desc = "某些游戏的实时更新也将发布在本网站的第 3 行 thr'" 另一个 SQL语法错误。(我将错误减少了一点,但它与原帖中的原始错误相同) 设置只有一行,多列;但是,我确实有一行的 ID(id = 1),您的测试查询也给了我:您的 SQL 语法有错误; ..... 'desc = "GHI", logoUrl = "JKL", ' 在第 3 行附近。 听起来您的问题与数据库有关,而不是您的查询字符串。您是否检查过列名(和大小写)匹配?你在任何地方都捕捉到 `mysql_error()' 吗?以上是关于包含关键字/保留词的PHP MySQL查询[重复]的主要内容,如果未能解决你的问题,请参考以下文章