我对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 />';
}
}
答案 0 :(得分:1)
您无法在ON
或WHERE
中使用列别名。它应该是
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。我希望它能帮助任何人帮助我理解原因。
这是正确的做法吗?我是否需要重新考虑这一点并重写我的功能?请向任何方向提出建议,以帮助我走上正轨。你最有帮助。感谢。