나는 상당히 새로 온 상황
에 덮어지고 있지 PHP에서 객체 지향 프로그래밍을 현재 나는 목적을 배우기위한 작은 CMS를 만드는거야. 나는 OOP에 관해서 많은 것을 배웠다. 그러나 나는 지금 이상한 문제에 직면하고있다. 데이터베이스 연결 및 쿼리를 처리하기 위해 Singleton 클래스를 만들었습니다.PHP 변수가 후속 쿼리
public static function getInstance()
{
if(!isset(self::$instance))
{
self::$instance = new Database();
}
return self::$instance;
}
같은 클래스에서 쿼리를 실행하는 방법도 있습니다. 준비된 명령.에 Y 인드 할 매개 변수가있는 선택적 매개 변수 W 조회와 두 개의 매개 변수가 필요합니다. 아래 소스를 볼 수 있습니다. 나는 같은 페이지에 여러 쿼리가있는 경우
public function execute($query, $params = array())
{
$this->error = false; // Set 'error' to false at the start of each query.
if($this->query = $this->pdo->prepare($query))
{
if(!empty($params))
{
$index = 1;
foreach($params as $parameter)
{
$this->query->bindValue($index, $parameter);
++$index;
}
}
if($this->query->execute())
{
$this->results = $this->query->fetchAll(PDO::FETCH_OBJ);
$this->count = $this->query->rowCount();
}
else
{
$this->error = true;
}
}
return $this;
}
문제는
의 results
및 count
변수는 여전히 첫 번째 쿼리의 값이 포함되어 있습니다. 첫 번째 쿼리가 내 데이터베이스에서 모든 사용자를 검색한다고 가정 해보십시오. 두 번째 쿼리는 데이터베이스에서 모든 블로그 게시물을 검색합니다. 아무 것도 없다고 가정 해 봅시다. 게시물이 없으면 메시지를 표시하고, 그렇지 않으면 루프를 실행하여 모든 결과를 표시합니다. 이 경우 블로그 게시물이 없어도 루프가 실행됩니다. count
변수는 데이터베이스에 게시물이 있는지 여부를 확인하는 데 사용되고 첫 번째 쿼리의 15 개를 여전히 보유하고 있기 때문에 루프가 실행됩니다.
이것은 분명히 약간의 오류를 유발합니다. results
과 동일합니다. 여전히 첫 번째 쿼리의 값을 보유합니다.
$query = Database::getInstance()->execute('SELECT * FROM articles ORDER BY article_id DESC');
if(!$query->countRes())
{
echo '<h2>There are no blog posts in the database.</h2>';
}
else
{
foreach($query->results() as $query)
{
echo '<article>
<h3>'.$query->article_heading.'</h3>
<p>'.$query->article_preview.'</p>
</article>';
}
}
countRes()
및 results()
방법은 단순히 DB 클래스에서 변수를 반환합니다.
나는 이해할 수있는 문제를 설명하기를 희망한다. 응답은 매우 감사합니다.
오 gawd는'->'주위에 공백을 두지 마십시오. – Madbreaks
좋아요, 내 게시물을 편집하고 제거했습니다. –
두 번째 쿼리에서'prepare()'가 성공 했습니까? 그것이 실패하면,'execute'에있는 나머지 코드는 건너 뛸 것이므로, 변수는 갱신되지 않을 것입니다. PDO에 대해 오류 신호가 활성화되어 있는지 확인하십시오. – Barmar