我已经作出,它发送2个值的搜索字段:具有多个使用连接LIKES
- 电话号码
- 汽车登记号码
两个字段是必需的和独特的。电话号码在表A中,汽车注册号码在表2中。表格以PersonID加入。这是主要的,独特的和表1,而不是表2中的主要和独特的,但价值相同。
我正在使用SELECT,以确保这是一个匹配项,如果电话号码和车号不属于同一个人,我会回声插入的数据不正确。
SELECT *
FROM Person
LEFT OUTER JOIN Car on Car.PersonID
WHERE Phonenumber LIKE ".$_POST['phonenumber']." AND
WHERE Carregnumber LIKE ".$_POST['carregnumber'].";
这不会给我任何结果。
我也曾尝试:
SELECT *
FROM Person
WHERE Phonenumber LIKE ".$_POST['phonenumber']."
LEFT OUTER JOIN Car on Car.PersonID
WHERE Carregnumber LIKE ".$_POST['carregnumber'].";
两个领域与$ _ POST定义。当我只使用:SELECT * FROM Person WHERE Phonenumber LIKE ".$_POST['phonenumber']."
它会给我结果。
我有点儿JOIN新,我已经通过一些教程告诉我内部,外部和左连接之间的区别。所以我不完全确定,如果我做得很好(嗯,我猜不是,否则我会得到数据)
我在正确的方向,或者我必须使用查询类似的查询我发现堆栈溢出:
SELECT airline, flt_no, fairport, tairport, depart, arrive, fare
FROM (SELECT * FROM flights
INNER JOIN airports
ON flights.fairport = airports.code
WHERE (airports.code = '?' OR airports.city='?')) AS matches
INNER JOIN airports
ON matches.tairport = airports.code
WHERE (airports.code = '?' OR airports.city = '?')
我试图编辑上述查询我自己的情况,但也给了我空白的结果。
编辑:谢谢你的意见,我已经调整了我的查询:
SELECT *
FROM Person
INNER JOIN Car on Car.PersonID = Person.PersonID
WHERE BSNNummer = ".$_POST['phonenumber']."
AND Kenteken = ".$_POST['carregnumber']."
这个查询仍然给我空白的结果,我按照从注释中的指示,我看到我做错了什么,但不幸的是它看起来我仍然有一个不完整的查询。
在你的第一个查询中,你应该说WHERE x和y(不是WHERE x和WHERE y)。您还会在这里获得很多有关SQL注入攻击的评论 - 将任意表单值直接插入到sql中会带来很大的安全风险。 –
谢谢,我刚刚尝试过,但仍然给我空白的结果。我意识到安全风险,这对我来说理解使用JOIN更重要,之后我将着手解决安全风险。 – John
好的 - 很多其他潜在的问题。您的JOIN需要包含两个表。所以,像ON Person.PersonID = Car.PersonID。此外,现在你有一个外部联接(它表示你想要所有匹配的Person记录,但只有Car记录匹配联接。但是,然后在你的WHERE子句中有Car表,这使得隐式INNER JOIN不在其中。因此,我认为你需要两个表之间的INNER JOIN。最后,LIKE子句用于匹配一个模式(它将包含一些通配符)。所以,为什么不仅仅与= –