内部连接和 PDO

Inner join and PDO

我对 INNER JOIN 和 PDO 有疑问。不使用 INNER JOIN 时,我的查询工作正常。将 INNER JOIN 添加到查询时,什么也没有显示。

这是可行的方法还是我完全错了?

有什么建议吗?

public function search($searchterm)
{
    $query = $this->db->prepare("
        SELECT 
            ad.id AS idet,
            ad.lid, 
            ad.firstname AS firstnamer, 
            ad.surname AS surnamer,
            ad.socialnr AS socialnumber,
            ba.class AS classes
        FROM `everybody` ad
        INNER JOIN `students` ba
        ON idet = ba.id
        WHERE (`firstname` LIKE :search OR `surname` LIKE :search OR `classes` LIKE :search)");

    $searchterm = '%' . $searchterm . '%';
    $query->bindParam(':search', $searchterm, PDO::PARAM_STR);

    $query->execute();

    while($row = $query->fetch(PDO::FETCH_ASSOC)) {
      echo $row['idet']. ' : '. $row['firstnamer']. ' '. $row['surnamer']. ' - '. $row['socialnumber']. ' Class: '. $row['classes']. '<br />';
    }

}

尝试更改

INNER JOIN `students` ba
    ON ad.id = ba.id
      /*^^^^*/
WHERE (ad.firstname LIKE :search OR ad.surname LIKE :search OR ad.class LIKE :search)");
     /*^^*/                       /*^^*/                     /*^^*/

您不能在 ONWHERE 中使用列别名。应该是

ON ad.id = ba.id

如果还有其他 SQL 错误,您应该启用 PDO 异常:

$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

谢谢大家的帮助。

是的,我已经为 PDO 错误启用了例外。没有错误被注册。我已经按照上面的 posted 尝试了你的建议。没有任何效果。

当不使用 INNER JOIN 时,这段代码就像一个魅力:

public function search($searchterm)
{

    $query = $this->db->prepare("
        SELECT 
            id,
            lid, 
            firstname,
            surname,
            socialnr
        FROM `everybody` 
        WHERE (`firstname` LIKE :search OR `surname` LIKE :search)");

    $searchterm = '%' . $searchterm . '%';
    $query->bindParam(':search', $searchterm, PDO::PARAM_STR);

    $query->execute();

    while($row = $query->fetch(PDO::FETCH_ASSOC)) {
      echo $row['id']. ' : '. $row['firstname']. ' '. $row['surname']. ' - '. $row['socialnr']. '<br />';
    }

}

我的第一个 post 和这个代码之间的区别在于没有 INNER JOIN。我希望它能帮助任何人帮助我理解原因。

这是正确的方法吗?我是否需要重新考虑并重写我的函数?请向任何方向提出建议,以帮助我走上正确的道路。你是最有帮助的。谢谢