【问题标题】:MySQL Unhelpful SQL Syntax ErrorMySQL 无用的 SQL 语法错误
【发布时间】:2016-12-09 00:00:20
【问题描述】:

我的 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 '' at line 1

我之前通过删除不必要的引号遇到过这个错误,但是这一次似乎不是问题。我也一直看到堆栈溢出问题,这些问题要么是因为不必要的引号,要么是该代码非常独特。如果有人可以帮助我或指出我有用的答案,我将不胜感激! :^]

代码:

    $sql = "SELECT(sect_id, sect_name, sect_desc)FROM sections WHERE sect_id = " . mysqli_real_escape_string($con,$_GET["id"]);

$result = mysqli_query($con,$sql);

if(!$result)
{
echo 'The sections could not be displayed, please try again later.' . mysqli_error($con); 

【问题讨论】:

  • 去掉列名周围的括号
  • var_dump($sql);(或$result)(或回声)——你得到了什么?
  • 旁注:您对SQL Injections 持开放态度,应该真正使用Prepared Statements 而不是连接您的查询。 mysqli_real_escape_string() 并不像人们希望的那样安全。
  • 转储 $_GET['id'] 并检查它是否真的包含您认为的内容?
  • 听起来$_GET["id"] 未设置或在您将其插入$sql 时为空。这会导致您的 SQL 查询为 SELECT(sect_id, sect_name, sect_desc)FROM sections WHERE sect_id = ; 并返回您看到的错误。在执行语句之前验证 $_GET["id"] 是否包含某些内容。

标签: php mysql mysqli forum


【解决方案1】:

此错误消息并非没有帮助。你只需要习惯 mysql 报告错误的方式即可。

当上报的查询部分为空时,表示发生错误at the very end of the query

表示$_GET["id"]为空,产生错误的SQL语句

SELECT(sect_id, sect_name, sect_desc)FROM sections WHERE sect_id = 

要解决这个问题,您应该始终使用准备好的语句

除了语法之外,prepared statement 将修复您的查询本质上容易发生的 sql 注入

此外,出现的下一个错误是字段列表的语法错误,应从中删除大括号。

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2012-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多