2017-02-28 49 views
0

我从我的页面url头中的查询字符串接收2个参数。我想使用这些parrams作为查询的日期标准,但是每当我尝试添加到我的where子句时,页面都会返回500错误。添加条款到JDatabase

这是我的语法,我应该改变什么,以便我可以在我的where子句中使用这两个变量?

<?php 

    header('Access-Control-Allow-Origin: *'); 

    $begin = $_GET['begin']; 
    $end = $_GET['end']; 

    $option = array(); //prevent problems 

    $option['driver'] = 'mssql';    
    $option['host']  = 'XXX.XXX.XX.XX';  
    $option['user']  = 'user';  
    $option['password'] = 'pass'; 
    $option['database'] = 'database';  
    $option['prefix'] = '';    

    $db = JDatabase::getInstance($option); 
    $result = $db->getQuery(true); 
    $result->select($db->quoteName(array('Teacher', 'student', 'countenrolled', 'countattending'))); 
    $result->from($db->quoteName('[SchoolStuff')); 
    $result->where($db->quoteName('registerdate') . ' >= '. $begin. AND ' <= ' .$end.); 
    $db->setQuery($result); 
    $results = $db->loadObjectList(); 
?> 

<table border="1"> 
    <thead> 
     <tr> 
      <th>Teacher</th> 
      <th>Student</th> 
      <th>Count Enrolled</th> 
      <th>Count Attending</th> 
     </tr> 
    </thead> 
     <tbody> 
     <?php 
      foreach($options as $option) { 
       print "<tr>"; 
       print "<td>".$option->Teacher."</td>"; 
       print "<td>".$option->Student."</td>"; 
       print "<td>".$option->CountEnrolled."</td>"; 
       print "<td>".$option->CountAttending."</td>"; 
       print "</tr>"; 
      } 
      ?> 
    </tbody> 
    </table 

回答

0

在你的WHERE子句中,你的AND应该被引用。另外,在where子句中,您要比较的字段需要同时进行比较。

其中a> = b和a < = C

$result->where($db->quoteName('registerdate') . " >= '". $begin."' AND ".$db->quoteName('registerdate')." <= '" .$end."'"); 
+0

即开始加载页 - 但抛出操作数类型冲突的错误:日期与int不兼容。我知道registerdate是一个日期数据类型 - 所以我假设两个问题是$ begin和$ end – BellHopByDayAmetuerCoderByNigh

+0

打印这2个变量。 – TopCheese

+0

begin = 2017-01-02 end = 2017-01-25 and this view based on - SchoolStuff我在做registerdate = Cast(registration_date As Date) – BellHopByDayAmetuerCoderByNigh

0

顺便提及,可以传递数组 “其中”

$query->where(array(first thing, second thing, &tc), operator[defaults to "AND"]);