我知道我做了很多很多错事,但我不知道如何解决这个问题(除了进行许多单独的查询。
mysql_query( 'SELECT *
FROM opdracht
where'. if(isset($opleiding))
{
'opleiding = "'.$opleiding.'" and'
}
if(isset($duur))
{
'duur = "'.$duur.'" and '
}
if(isset($type))
{
'type = "'.$type.'" and'
}
' gevuld ="nee";');
基本上,我要做的是查询哪些语句取决于变量
这段代码不起作用,但我想不出一种让它起作用的方法
帮助
答案 0 :(得分:1)
if (isset($opleiding)) { $opleiding = 'opleiding = "'.$opleiding.'" and'; } else { $opleiding = ""; }
if (isset($duur)) { $duur= 'duur= "'.$duur.'" and'; } else { $duur= ""; }
if (isset($type)) { $type= 'type= "'.$type.'" and'; } else { $type= ""; }
$query = "SELECT * FROM optdracht WHERE $oplediding $duur $type gevuld ='nee';"
mysql_query($query);
将它们设置在外部,然后在查询中使用它们。此外,您应该检查错误。 (我不记得如何在mysql_query()
中这样做,因为它已经很老了而且我没有使用它。如果有人知道请编辑我的答案)
答案 1 :(得分:0)
'where ' . (isset($opleiding) ? "opleiding = '$opleiding' and " : '') . ...
或
$query = array();
if (isset($opleiding) { $query[] = "opleiding = '$opleiding' and "; }
....
.... 'where ' . implode(' and ', $query);
注意:查找空格,即使您的代码“有效”,它仍然会创建whereopleiding ...
和andduur ...
之类的查询。另外,请为您的数据库查询编写一个小API,它会检查错误消息,在调试模式下显示它们,如果需要还会记录所有内容。
答案 2 :(得分:0)
除了其他人所说的,问题在于它们应该没有空间。
例如:
mysql_query(
'SELECT *
FROM opdracht
where'. if(isset($opleiding))
{
'opleiding = "'.$opleiding.'" and'
}
.
.
.
当执行此操作时,您会得到....'来自opdracth whereopleiding ='
这是一个修复:
<?php
$query = "SELECT * FROM oprecht WHERE" .
(isset($opleiding) ?
' opleiding = "'.$opleiding.'" and'
:
""
) .
(isset($duur) ?
' duur = "'.$duur.'" and '
:
""
) .
(isset($type) ?
' type = "'.$type.'" and'
:
""
) .
' gevuld ="nee";';
echo $query;
答案 3 :(得分:0)
我认为你应该使用合适的设计模式。尝试使用MVC设计模式(可能还有一个Repository类来存储连接类及其方法),为不同的检索类型设置方法可以使代码更稳定,更容易调试......
答案 4 :(得分:-1)
您可以使用以下内容:
$opleidingClause = (isset($opleiding) ? "opleiding = '{$opleiding}' AND " : "" );
$duurClause = (isset($duur) ? " duur = '{$duur}' AND " : "" );
$typeClause = (isset($type) ? " type = '{$type}' AND " : "" );
$query = "SELECT * FROM optdracht WHERE {$opledidingClause} {$duurClause} {$typeClause} gevuld = 'nee';"
mysql_query($query);
注意:大括号{}
可以在字符串中使用变量以便于阅读。