【问题标题】:sql syntax using php session array variable使用php会话数组变量的sql语法
【发布时间】:2017-07-03 16:56:05
【问题描述】:

您好,我在使用 PHP 时遇到 SQL 语法错误,我的代码是

     $_SESSION['reparray']=array();
    $com = $conn->prepare("select * from replies where rep_com_id=? AND rep_id NOT IN(".implode(',',$_SESSION['reparray']).") order by likes desc limit 10");
    $com->execute(array($_POST['id']));
    $fetchcom = $com->fetchAll();
    foreach ($fetchcom as $com_column ){
    array_push($_SESSION['reparray'], $com_column['rep_id'] );

我在其他页面中使用相同的代码,只是使用不同的变量,它工作正常,但在这里我收到这样的错误:

PDOException: SQLSTATE[42000]: 语法错误或访问冲突:1064 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法,以便在第 9 行的 C:\wamp64\www\randomz.com\functions\getrep.php 的第 1 行中的 ') order by likes desc limit 10' 附近使用/p>

【问题讨论】:

  • 如果您在查询之前设置数组,则该数组为空,IN 语句也将为空。
  • 如有疑问,echo/var_dump()/print_r() 是您的朋友。
  • 我尝试手动在数组中添加值,是的,它没有显示任何错误,但获取相同的 cmets 超过 1 次..
  • 是的@Mike 我试过了,它的 olride,array_push 工作正常
  • "但获取相同的 cmets 超过 1 次" - 这些 cmets 是否已多次使用相同的文本和不同的评论 ID 发布?

标签: php mysql sql database


【解决方案1】:

您似乎希望reparray 累积您已经在会话中收集的id 值。但是由于数组被初始化为空数组,SQL就会有这样的条件:

IN ()

...这是无效的 SQL 语法。

您可以通过将一个虚拟值连接到您的数组来解决这个问题;一个永远不会出现在您的表中的值。让我们假设 -1 就是这样一个值。然后像这样添加+ [-1]

implode(',',$_SESSION['reparray'] + [-1])

【讨论】:

  • 我试过了,没有显示任何错误,但再次获取相同的 cmets。
  • 我有相同的 SQL 查询,只是变量不同,它工作正常.. 是否有任何 PHP max_session 限制?我不知道,
  • 但是“获取相同的 cmets”是一个不同的问题。您的问题是“我有一个 SQL 语法错误......”,并且标题又是“SQL 语法”。现在你告诉我你没有错误。那么你关于错误的问题解决了吗?
猜你喜欢
  • 2011-09-03
  • 2012-02-19
  • 2014-10-10
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2023-03-29
相关资源
最近更新 更多