您的SQL语法有误-在第1行的'WHERE userId ='6'附近使用的语法

时间:2018-07-05 12:12:25

标签: php mysql sql

我得到了错误

  

您的SQL语法有错误;检查手册   对应于您的MariaDB服务器版本,以使用正确的语法   在第1行的'WHERE userId ='6'附近

查询这些行时:

$query = 'SELECT * FROM post ORDER BY created DESC ';
    $query .= 'WHERE userId = \'' . mysqli_real_escape_string($db, $userId) . '\'';

找不到解决方案。是否需要更改数据库列或语法?

4 个答案:

答案 0 :(得分:1)

由于在WHERE之后使用ORDER BY而导致的错误。正确的查询应为:

$query = 'SELECT * FROM post WHERE userId = "' . mysqli_real_escape_string($db, $userId) . '" ORDER BY created DESC';

答案 1 :(得分:1)

在WHERE之后使用ORDER BY。在查询中

<?php
$query = 'SELECT * FROM post';
$query .= ' WHERE userId = "' . mysqli_real_escape_string($db, $userId) . '"';
$query .= ' ORDER BY created DESC';
?>

答案 2 :(得分:1)

查询出现多个错误:

$query = 'SELECT * FROM post ORDER BY created DESC ';
  1. ORDER BY在语法流中紧随WHERE之后,因此在ORDER BY之后指定WHERE是语法错误(您将得到什么)

    $ query。='WHERE userId = \''。 mysqli_real_escape_string($ db,$ userId)。 '\'';

  2. 您实际上并没有使用参数化查询。熟悉并使用它们,mysqli_real_escape_string只是使用适当参数的临时条件。

  3. 您正在使用字符串表示法比较用户ID(可能是整数)。那是毫无意义的,并可能导致不良结果。在SQL中,整数不需要用引号引起来。

用于查询的“已修复”代码(尽管仍然查找如何参数化):

$query = 'SELECT * FROM post WHERE userID = '.mysqli_real_escape_string($db, $userId).' ORDER BY created DESC';

答案 3 :(得分:0)

您甚至尝试回显查询吗?您会看到DESCWHERE之间没有空格。

ORDER BY移至末尾。

SELECT whatever FROM wherever WHERE whatever ORDER BY whatever

此外,阅读PDO和准备好的语句,该代码容易受到SQL注入的攻击。 https://phpdelusions.net/pdo