2016-12-05 50 views
0

我使用PHP执行查询的数据库。我已经成功地通过该程序执行了许多查询,但最近一次查询给我带来了麻烦。原来的SQL查询如下:格式在mysqli_query

SELECT Champion, RunnerUp 
FROM playoffs 
WHERE Champion = "Detroit Red Wings" 
AND (RunnerUp = "Montreal Canadiens" OR RunnerUp = "New York Rangers"); 

这种成功运行和数据库在HeidiSQL直接使用时产生正确的输出。我试着在如下的程序来实现它,换出实际的团队名称为PHP变量:

$result = mysqli_query($link, "SELECT Champion, RunnerUp 
       FROM playoffs 
       WHERE Champion = '$champion' 
       AND (RunnerUp = '$RunnerUp' OR RunnerUp = '$RunnerUp2')") ; 

在这个版本中,似乎括号的嵌入式集不被认定为这样的,而不是看似是报价的一部分。这个版本没有输出。

我修改,如下所示:

$result = mysqli_query($link, "SELECT Champion, RunnerUp 
       FROM playoffs 
       WHERE Champion = '$champion' 
       AND RunnerUp = '$RunnerUp' OR RunnerUp = '$RunnerUp2'") ; 

删除第二组括号中,它执行了,但因为逻辑读取不同不会产生期望的结果,给我的元组,只要$冠军和$亚军比赛或者只要$ RunnerUp2是亚军。无论如何执行这个声明,因为我最初打算使用PHP?

UPDATE:把查询到的变量,方法如下:

$query = "SELECT Champion, RunnerUp 
       FROM playoffs 
       WHERE Champion = '$champion' 
       AND (RunnerUp = '$RunnerUp' OR RunnerUp = '$RunnerUp2')"; 

,并呼应它,我得到的输出

SELECT Champion, RunnerUp FROM playoffs WHERE Champion = '' AND (RunnerUp = 'Montreal Canadiens' OR RunnerUp = 'Toronto St. Patricks') 

所以它看起来像出于某种原因,我的冠军变量从未收到任何东西这是因为最初调用它时,它被称为“冠军”而不是“冠军”。

+2

把查询一个叫'$ query'那么你可以'回声$ query变量的内部;',看看查询看起来你希望它。您的'$ champion','$ RunnerUp'或'$ RunnerUp2'变量可能会丢失空白。然后像这样调用:'mysqli_query($ link,$ query);'因为它看起来整洁。如果这不能解决问题,请更新问题。 – varlogtim

+0

这帮助我弄清楚在这些行之前我在哪里做了格式错误。谢谢 – user3068177

回答

0

找出哪里出错了以前后,看来这个代码:

$query = "SELECT Champion, RunnerUp 
      FROM playoffs 
      WHERE Champion = '$champion' 
      AND (RunnerUp = '$RunnerUp' OR RunnerUp = '$RunnerUp2')"; 

实际上会工作。虽然,正如上面评论中所提到的那样,将查询添加到变量并调用它会更清晰。

+1

'print_r'是您尝试调试代码时的朋友! :) – varlogtim