PHP mysql选择查询在哪里(通配符)

时间:2012-12-08 01:03:18

标签: php mysql wildcard

我正在尝试使用以下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,则MySQL查询中没有WHERE。我将GET设置为某个东西,然后有一个WHERE具有该GET值。

目前我收到以下错误:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近''第1行的'WHERE column1LIKE'GROUP BY1'

4 个答案:

答案 0 :(得分:2)

你需要使用某种逃避,但这是另一天的练习。如果您只是想让它工作,请删除where变量周围的单引号。

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

答案 1 :(得分: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";

注意您的脚本再次遭到攻击。 Read about SQL-injections

答案 2 :(得分: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();

答案 3 :(得分:0)

我认为你可以这样做: 顺便说一句..你不需要其他部分“”就像%“”你可以简单地省略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";