문제

안녕하세요, 선택 함수를 생성하는 기능을 만들려고합니다.

그러나 다음 코드

public function select($psTableName, $paFields ="",$paWhere=array())
{
    //initial return value
    $lbReturn = false;
    try
    {
        $lsQuery = "SELECT * FROM `";
        $lsQuery .= $psTableName;
        $lsQuery .= "` ";
        if (!empty($paWhere)){
                $lsQuery .= "WHERE ";
                print_r($paWhere);
                foreach($paWhere as $lsKey => $lsValue)
                {
                    echo $lsKey."<br>";
                    $paWhere[] = $lsKey." = '".mysql_real_escape_string($lsValue)."'";
                }
                $lsQuery .= implode(" AND ", $paWhere);
                //$lsQuery = substr($lsQuery,0,(strlen($lsQuery)-5));
        }

        //echo $lsQuery;
        //execute $lsQuery
        $this->msLastQuery = $lsQuery;
        if(!$this->execute())
        {
            throw new DBException("Select failed, unable to execute query: ".$lsQuery);
        }
        else
        {
            $lbReturn = true;
        }
    }
    catch(DBException $errorMsg)
    {
        ErrorHandler::handleException($errorMsg);
    }
    return $lbReturn;
}

이 SQL 문을 생성합니다.

SELECT * FROM `persons` WHERE email@gmail.com AND 2d1cf648ca2f0b2499e62ad7386eccc2 AND 1 AND per_email = 'email@gmail.com' AND per_password = '2d1cf648ca2f0b2499e62ad7386eccc2' AND per_active = '1'

왜 그것이 Where 절후의 값만을 보여주고 돌아가서 Key => 값을 표시하는 이유를 먼저 모릅니다.

아이디어가 있습니까?

도움이 되었습니까?

해결책

당신은 재사용합니다 $paWhere 루프에서 현재 값에 추가됩니다. 새로운 배열을 사용해야합니다.

$result = array();
foreach($paWhere as $lsKey => $lsValue) {
    $result[] = $lsKey . " = '" . mysql_real_escape_string($lsValue) . "'";
}
$lsQuery .= implode(" AND ", $result);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top