1

次のMySQLクエリを使用しようとしていますが、明らかに何か問題があります。page.phpまたはpage.php?q=が次のクエリを返すようにしようとしています。

if (!isset($_GET['q'])) { $where = "WHERE column1 LIKE %"; }
else { $where = "WHERE column1 LIKE ".$_GET['q']; }

$query = "SELECT column1, column2 FROM table '$where' GROUP BY column1";

したがって、GETがない場合WHERE、MySQLクエリにはありません。GETが何かに設定されている場合、WHEREそのGET値を持つがあります。

現在、次のエラーが発生しています。

SQL構文にエラーがあります。1行目の「WHEREcolumn1LIKE」GROUPBYcolumn1'の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

4

4 に答える 4

2

ある種のエスケープを使用する必要がありますが、それは別の日の演習です。単に機能させたい場合は、where変数を囲む一重引用符を削除してください。

$query = "SELECT column1, column2 FROM table $where GROUP BY column1";
于 2012-12-08T01:06:11.007 に答える
1

WHERE次のように、検索文字列を一重引用符で囲まれた句に入れる必要があります。

$where = "";
// if there the get q is set we add the were clause
if (!isset($_GET['q'])) {
    $where = "WHERE column1 LIKE %";
    // ^ This WHERE clause is useless, since it matches all strings.
    // Omitting this WHERE clause has the same effect.
}
else { $where = "WHERE column1 LIKE ".$_GET['q']; }

$query = "SELECT column1, column2 FROM table ".$where." GROUP BY column1";

スクリプトは攻撃に対して非常に脆弱であることに注意してください。SQLインジェクションについて読んでください

于 2012-12-08T01:10:25.003 に答える
1

PDOを使用する一般的な解決策については、このスニペットを試してください($ dbはPDO接続オブジェクトです)。

$params = array();

$sql = 'SELECT column1, column2 FROM table where 1 ';

if (!empty($_GET['q'])) {
    $sql .= " column1 like ?";
    $params[] = '%' . $_GET['q'] . '%';
}

if (!empty($_GET['r'])) {
    $sql .= " column2 like ?";
    $params[] = '%' . $_GET['r'] . '%';
}

$sql .= ' GROUP BY column1 ORDER BY column1';

$query = $db->prepare($sql);
$i = 1;
foreach ($params as $param) {
    $query->bindValue($i, $param);
    $i++;
}
$query->execute();
于 2012-12-08T02:06:16.917 に答える
0

私はあなたがそれを簡単に行うことができると思います:ところで..あなたは他の部分を必要としません "" like% ""あなたは単にwhere句をすべて一緒に省略することができ、それは同じ効果をもたらします...これは何のレプリカです投稿したばかり:

$where = "";
//if there the get q is set we add the where clause
if(isset($_GET['q'])) { 
   $where = "WHERE column1 LIKE '".$_GET['q']."'"; 
}

$query = "SELECT column1, column2 FROM table ".$where." GROUP BY column1";
于 2012-12-08T01:08:09.437 に答える