我正在尝试使用以下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'
答案 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";