0

我在一个表单中有多个 POST 数据字段并想查询 mysql 数据库,如果只输入一个 POST 数据字段,一切正常,但如果有两个或更多字段,我会收到错误,因为我需要在我的问题之间输入 AND。

$sql ="SELECT * FROM  `medlem` WHERE";

if(!empty($_POST[fnamn])){
    $a=mysql_real_escape_string($_POST['fnamn']);
    $sql .= " `Fornamn` LIKE '%$a%'";
}
if(!empty($_POST[enamn])){
    $a=mysql_real_escape_string($_POST['enamn']);
    $sql .= " `Efternamn` LIKE '%$a%'";
}
if(!empty($_POST[adress])){
    $a=mysql_real_escape_string($_POST['adress']);
    $sql .= " `adress` LIKE '%$a%'";
}
if(!empty($_POST[postnr])){
    $a=mysql_real_escape_string($_POST['postnr']);
    $sql .= " `postnr` LIKE '%$a%'";
}
if(!empty($_POST[stad])){
    $a=mysql_real_escape_string($_POST['stad']);
    $sql .= " `stad` LIKE '%$a%'";
}
if(!empty($_POST[pnr])){
    $a=mysql_real_escape_string($_POST['pnr']);
    $sql .= " `pnr` LIKE '%$a%'";
}
if(!empty($_POST[tfn])){
    $a=mysql_real_escape_string($_POST['tfn']);
    $sql .= " `tfn` LIKE '%$a%'";
}
if(!empty($_POST[mobil])){
    $a=mysql_real_escape_string($_POST['mobil']);
    $sql .= " `mobil` LIKE '%$a%'";
}
if(!empty($_POST[epost])){
    $a=mysql_real_escape_string($_POST['epost']);
    $sql .= " `epost` LIKE '%$a%'";
}

如果用户填写了两个帖子字段,我会得到“SELECT * FROM medlemWHERE Fornamn LIKE 'foo' EfternamnLIKE 'bar',并且它们之间缺少 AND。这个问题有简单的解决方案吗?

皮疹

4

2 回答 2

2

您可以循环执行

$params = array(
    'fnamn' => 'Fornamn',
    'enamn' => 'Efternamn',
    'adress' => 'adress',
    'postnr' => 'postnr',
    'stad' => 'stad',
    'pnr' => 'pnr',
    'tfn' => 'tfn',
    'mobil' => 'mobil',
    'epost' => 'epost'
);
$condition = array();
foreach ($params as $key => $field) {
    if (isset($_POST[$key]) && !empty($_POST[$key])) {
        $a = mysql_real_escape_string($_POST[$key]);
        $condition[] = "`{$field}` LIKE '%{$a}%'";
    }
}

$slq = 'select * from `medlem` where '.implode(' and ', $condition);
于 2012-11-16T18:06:52.393 回答
2

停止!

欢迎来到堆栈溢出!请不要mysql_*在新代码中使用函数。它们不再被维护,并且已经开始弃用过程。看到红框了吗?改为了解准备好的语句,并使用PDOMySQLi -本文将帮助您决定使用哪个。如果您选择 PDO,这里有一个很好的教程


您看到这个的原因是因为您正在构建没有ORor的查询AND。(需要分隔逻辑语句)。

最好的解决方案是将所有查询部分添加到一个数组中,并使用" AND ".

于 2012-11-16T18:00:40.117 回答