【问题标题】:Results different when running query in phpmyadmin and on website在 phpmyadmin 和网站上运行查询时结果不同
【发布时间】:2020-04-18 16:14:15
【问题描述】:

我有两个表,我正在尝试对其运行查询。

如果我在 phpmyadmin 中运行以下查询,我会得到我期望的结果,只返回一个 id 为 9 的结果,但是在我的网页上运行它时,它会返回所有 4 个结果。我可以将任何我想要的作为用户 ID,即使是一个不存在的,它也会忽略它。

    $sql = "
    SELECT c.*
         , cu.userID 
      FROM ConversationUsers AS cu 
      LEFT 
      JOIN Conversations AS c 
        ON c.id = cu.convoID 
     WHERE cu.userID = userID
     ";
    $q = $pdo->prepare($sql);
    $q->bindValue(':userID', $vars['userID']);
    $q->execute();
    if($q->errorCode() != 0) {
        $errors = $q->errorInfo();
        echo($errors[2]);
    }
    foreach ($q->fetchAll() as $row) {
        $convos[] = $row;
    }

    echo "<pre>";
    print_r($convos);
    echo "</pre>";

    echo "
    SELECT c.*
         , cu.userID 
      FROM ConversationUsers AS cu 
      LEFT 
      JOIN Conversations AS c 
        ON c.id = cu.convoID 
     WHERE cu.userID = " . $vars["userID"];

回声产生:

SELECT c.*
     , cu.userID 
  FROM ConversationUsers AS cu 
  LEFT 
  JOIN Conversations AS c 
    ON c.id = cu.convoID 
 WHERE cu.userID = 1

印刷产生

Array
(
    [0] => Array
        (
            [id] => 9
            [0] => 9
            [lastUpdated] => 2019-12-29 00:00:00
            [1] => 2019-12-29 00:00:00
            [userID] => 1
            [2] => 1
        )

    [1] => Array
        (
            [id] => 9
            [0] => 9
            [lastUpdated] => 2019-12-29 00:00:00
            [1] => 2019-12-29 00:00:00
            [userID] => 2
            [2] => 2
        )

    [2] => Array
        (
            [id] => 10
            [0] => 10
            [lastUpdated] => 2019-12-29 00:00:00
            [1] => 2019-12-29 00:00:00
            [userID] => 2
            [2] => 2
        )

    [3] => Array
        (
            [id] => 10
            [0] => 10
            [lastUpdated] => 2019-12-29 00:00:00
            [1] => 2019-12-29 00:00:00
            [userID] => 3
            [2] => 3
        )

)

表格设置如下

CREATE TABLE `Conversations` (
  `id` int(11) NOT NULL,
  `lastUpdated` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `Conversations` (`id`, `lastUpdated`) VALUES
(9, '2019-12-29 00:00:00'),
(10, '2019-12-29 00:00:00');

CREATE TABLE `ConversationUsers` (
  `convoID` int(11) NOT NULL,
  `userID` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `ConversationUsers` (`convoID`, `userID`) VALUES
(9, 1),
(9, 2),
(10, 2),
(10, 3);

【问题讨论】:

    标签: php mysql


    【解决方案1】:

    您在:userID 中缺少:。这使得WHERE 始终为真:

    $sql = "SELECT c.*, cu.userID FROM ConversationUsers AS cu LEFT JOIN Conversations AS c ON c.id = cu.convoID WHERE cu.userID = :userID";
    

    您的echo 行使用了$vars["userID"],这就是它显示正确结果的原因。

    【讨论】:

      【解决方案2】:

      您在查询中的参数前错过了::

       $sql = "SELECT c.*, cu.userID FROM ConversationUsers AS cu LEFT JOIN Conversations AS c ON c.id = cu.convoID 
      WHERE cu.userID = :userID";
      

      【讨论】:

        猜你喜欢
        • 2015-09-15
        • 1970-01-01
        • 2021-09-09
        • 2021-09-07
        • 1970-01-01
        • 2013-03-02
        • 2020-02-03
        • 2020-02-15
        • 2016-02-02
        相关资源
        最近更新 更多