内部连接和 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)");
/*^^*/ /*^^*/ /*^^*/
您不能在 ON
或 WHERE
中使用列别名。应该是
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。我希望它能帮助任何人帮助我理解原因。
这是正确的方法吗?我是否需要重新考虑并重写我的函数?请向任何方向提出建议,以帮助我走上正确的道路。你是最有帮助的。谢谢
我对 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)");
/*^^*/ /*^^*/ /*^^*/
您不能在 ON
或 WHERE
中使用列别名。应该是
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。我希望它能帮助任何人帮助我理解原因。
这是正确的方法吗?我是否需要重新考虑并重写我的函数?请向任何方向提出建议,以帮助我走上正确的道路。你是最有帮助的。谢谢