PHP和'变量'mySQL查询

时间:2011-10-07 10:38:35

标签: php mysql

我知道我做了很多很多错事,但我不知道如何解决这个问题(除了进行许多单独的查询。

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";');
基本上,我要做的是查询哪些语句取决于变量 这段代码不起作用,但我想不出一种让它起作用的方法 帮助

5 个答案:

答案 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);

注意:大括号{}可以在字符串中使用变量以便于阅读。