内部联接和PDO

时间:2015-01-01 17:15:59

标签: php mysql join pdo inner-join

我对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 />';
    }

}

3 个答案:

答案 0 :(得分:1)

您无法在ONWHERE中使用列别名。它应该是

ON ad.id = ba.id

如果存在其他SQL错误,您应该启用PDO例外:

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

答案 1 :(得分:0)

尝试更改

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

答案 2 :(得分:0)

谢谢大家的帮助。

是的我已启用PDO错误的例外。没有注册错误。我已经尝试了上面发布的建议。什么都行不通。

当不使用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 />';
    }

}

我的第一篇文章和这篇文章中的代码之间的差异是没有INNER JOIN。我希望它能帮助任何人帮助我理解原因。

这是正确的做法吗?我是否需要重新考虑这一点并重写我的功能?请向任何方向提出建议,以帮助我走上正轨。你最有帮助。感谢。