2011-11-03 72 views
0

编程一整天后,我在深夜绘制一片空白,也许别人可以帮助解决我的问题所在。我试图在PHP中使用AND和OR来获取基于多个变量的正确字段的MySQL查询。MySQL高级查询多个AND AND OR

这里是我想不工作要做到这一点:

$result = mysql_query("SELECT * FROM tableName 
     WHERE key = '$key' ((userFrom = '$userFrom' AND userTo = '$userTo') 
         OR (userFrom = '$userTo' AND userTo = '$userFrom')"); 

基本上在英语这样做是什么,它需要知道的键值。一旦它匹配了键值,那么我需要所有具有该键值的行也是相同的用户 - 也可以是相同的用户 - 将它视为两个人之间必须拥有他们的对话主题(关键)和两个参与者之间的对话(从和到)。

有什么建议吗?

+0

你错过了'key ='$ key''和下面的括号之间的AND - 这是你的例子中的一个错字吗? – millimoose

+0

是的,我不小心忘记输入。实际上我确实有AND,但仍然无法工作。 – Brayden

回答

2

看起来像三个开括号和两个封闭括号给我。缺少的是紧接在结束双引号之前。 (当然,还有其他人提到的失踪和其他)。

而且,当然,嵌入(如果允许的话)用户名将会使命令各种人物无法在特定数据的方式。出于这个原因,为了避免SQL注入攻击,切换到参数化查询。

+0

你是对的。我重新阅读此另一个时间,评估的参数是后到我的网页,并意识到有一个与它的问题。 – Brayden

+0

嵌入式单引号? –

0

我认为这是刚开括号的正确方法的问题。试试这个:

$result = mysql_query("SELECT * FROM tableName 
         WHERE key = '$key' **AND** 
         ((userFrom = '$userFrom' AND userTo = '$userTo') OR 
         (userFrom = '$userTo' AND userTo = '$userFrom')"); 

或许:

$result = mysql_query("SELECT * FROM tableName 
         WHERE ((key = '$key') AND 
         ((userFrom = '$userFrom' AND userTo = '$userTo') OR 
         (userFrom = '$userTo' AND userTo = '$userFrom'))"); 

我认为,如果你与你会得到你想要的东西乱动。

+0

似乎没有办法。我一直在摆弄括号的位置,并没有太多运气打击我。 – Brayden

+0

我跑了一个类似的结构查询(与拉里提到的额外右括号缺失),并没有顺利结束。 –

+0

你有确切的查询吗?我试过了,没有工作..这是我更新的查询: $结果= mysql_query(“SELECT * FROM chatloudChats WHERE((apiKey = '$ apiKey')和((userFrom = '$ userFrom' AND用户至= 'userTo')OR(userFrom ='$ userTo'AND userTo ='$ userFrom')))“); – Brayden