我在一个表单中有多个POST数据字段,并希望查询mysql数据库,如果只输入一个POST数据字段,所有的事情都在工作,但如果有两个或更多的字段,我得到错误,因为我需要输入和我的问题之间。
$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%'";
}如果用户填写了两个post字段,我会得到"SELECT * FROM medlem WHERE FornamnLIKE 'foo' Efternamn LIKE 'bar',并且它们之间缺少一个and,这个问题有没有简单的解决方案?
阿拉什
发布于 2012-11-17 02:06:52
你可以在循环中完成它
$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-17 02:00:40
停!
欢迎使用Stack Overflow! 。它们不再被维护,deprecation process已经开始对其进行维护。看到了吗?相反,学习,并使用PDO或MySQLi - this article将帮助您决定使用哪种方法。如果你选择PDO,here is a good tutorial。
之所以会出现这种情况,是因为您在没有使用OR或AND的情况下构建查询。(这是分离逻辑语句所必需的)。
最好的解决方案是将所有查询部分添加到一个数组中,并使用a分隔符" AND "进行内爆。
https://stackoverflow.com/questions/13421930
复制相似问题