php—您的sql语法中有一个错误—在第1行的“where userid='6”附近使用的语法

wtlkbnrh  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(289)

我得到了错误
sql语法有错误;检查与您的mariadb服务器版本对应的手册,以获取在第1行“where userid='6''附近使用的正确语法
查询这些行时:

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

找不到解决方案。是否需要更改db的列或语法?

eaf3rand

eaf3rand1#

你有没有试着回应这个问题?你会发现他们之间没有空隙 DESCWHERE .
移动 ORDER BY 到最后。 SELECT whatever FROM wherever WHERE whatever ORDER BY whatever 另外,阅读pdo和prepared语句,该代码容易受到sql注入的攻击。https://phpdelusions.net/pdo

lmyy7pcs

lmyy7pcs2#

在where之后使用order by。在查询中

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

fcg9iug33#

查询出现多个错误:

$query = 'SELECT * FROM post ORDER BY created DESC ';

ORDERBY在语法流中紧跟在where之后,因此在ORDERBY之后指定where是一个语法错误(您得到的)
$query.='其中userid=''。mysqli\u real\u escape\u字符串($db,$userid)。''';
您实际上没有使用参数化查询。熟悉并使用它们, mysqli_real_escape_string 只是使用适当参数的绷带。
您正在使用字符串表示法比较一个userid(可能是一个整数)。这是毫无意义的,可能会导致不想要的结果。在sql中,整数不需要用引号括起来。
为您的查询“修复”了代码(但仍要查找如何参数化):

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

mkshixfv4#

由于使用 WHERE 之后 ORDER BY . 正确的查询应该是:

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

相关问题