2010-11-22 15 views
0

私は、PHP-FirebirdにGROUPを連結として入れようとしています。しかし、それは動作していないようです。 私のスクリプトのように:GROUP BYは連結中に動作しません

$sGroupBy = " GROUP BY LINE_NAME "; 

$sQuery = "SELECT ".$sLimit." LINE_NAME, MODEL_ONLY, VER_ONLY, PROD_NO, 
      LOT_SIZE, START_SERIAL, SERIAL_NO_LOW, SERIAL_NO_UP, PROD_DATE 
      FROM DOC_TO".$sWhere.$sGroupBy.$sOrder.";"; 

私はこの問題を解決するためにどのように行うのですか? 私はより完全に学ぶことができるPHP-CONCATENATIONについてのいくつかのサイトやチュートリアルをお持ちですか? 事前に感謝します。


$sOrder = " ORDER BY PROD_DATE DESC "; 

$sWhere = " WHERE (LINE_NAME LIKE '".$_POST['sSearch']."%' OR 
      MODEL_ONLY LIKE '%".$_POST['sSearch']."%' OR ". 
      " VER_ONLY LIKE '%".$_POST['sSearch']."%' OR ". 
      " LOT_SIZE LIKE '%".$_POST['sSearch']."%' OR ". 
      " START_SERIAL LIKE '%".$_POST['sSearch']."%' OR ". 
      " SERIAL_NO_LOW LIKE '%".$_POST['sSearch']."%' OR ". 
      " SERIAL_NO_UP LIKE '%".$_POST['sSearch']."%' OR ". 
      " PROD_NO LIKE '%".$_POST['sSearch']."%' OR ". 
      " PROD_DATE LIKE '%".$_POST['sSearch']."%') "; 
$sLimit = ""; 
if (isset($_POST['iDisplayStart'])) 
{ 
    settype($iDisplayStart,'integer'); 
    $iDisplayStart = $_POST['iDisplayStart']; 
    $iDisplayLength = $_POST['iDisplayLength']; 
    $sLimit = sprintf(" FIRST %d SKIP %d ",$iDisplayLength,$iDisplayStart); 
} 
+0

$ sと$ sOrderの外観を教えてください。あなたのSQLは$ sGroupByのような変数の端にスペースがあると仮定するとうまくいくはずです – pinkfloydx33

+0

ups..sorry私は遅いです – klox

+0

約$ sLimitは何ですか? –

答えて

1

SELECT X, Y, Z GROUP BY Xも意味がありません。 YZでグループ化するか、集合関数で使用する必要があります。 DISTINCTも動作します(postgreSQL group by different from mysql?を参照)。

また、SQLインジェクションの招待状であるクエリ文字列を作成する際に、ユーザー入力を直接使用しています。パラメータ化されたクエリを使用します。あなたが$_POSTの内容をエスケープされた文字列に置き換えたり、魔法の引用符を使用したりしていないことを前提としています。どちらも悪い習慣ですが、 SQLインジェクションの脆弱性

SQLクエリに問題があると思われる場合は、まずそれを印刷して調べる必要があります。それがそのままで、don'tのような簡単なsSearchの入力でコードが壊れている可能性があります。

+0

わかりません。 Firebirdへの実際のクエリの例を表示する必要があります。 – aib