2012-12-20 3 views
-2

데이터베이스에서 정보를 선택하는 프로 시저 스타일 PHP 함수를 만드는 데 익숙하지만 객체 지향 준비 SQL 문으로 전환 할 때 내 함수가 더 이상 작동하지 않습니다. 내가 절차 PHP를 수행하고 배우려고하고 나는 아직 OOP를 이해하지 못하는, 그래서 이것은 내 문제입니다 :PHP OOP 대 프로 시저 MySQL 함수 참조

이 같이 예상 작품 :

if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) { 
    $stmt->bind_param("s", $city); 
    $city = 'la'; 
    $stmt->execute(); 
    $stmt->bind_result($state); 
    $stmt->fetch(); 
    $stmt->close(); 
    echo $state; 
} 

아직이하지 않는 :

function get_state($city) { 
if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) { 
     $stmt->bind_param("s", $city); 
     $stmt->execute(); 
     $stmt->bind_result($state); 
     $stmt->fetch(); 
     $stmt->close(); 
     echo $state; 
    } 
} 

get_state('la'); 

두 가지 예 모두 데이터베이스 mysqli 연결을 필요로하지만 함수 버전이 어떤 이유로 작동하지 않습니다. 무엇이 잘못 되었나요?

+1

"작동하지 않는다"는 것이 정확히 무엇을 의미합니까? 오류가 발생 했습니까 아니면 예상 결과를 제공하지 않고 있습니까? – Supericy

+0

@Supericy 첫 번째 예는 데이터베이스에서 결과를 반환하고 함수 버전은 아무 것도 반환하지 않습니다. –

답변

1

변수 $mysqli은 함수에서 범위를 벗어납니다. 함수에 인수로 전달하고 싶지 않으면 전역 변수로 선언해야합니다. 이 전역 또는 함수에 인수로 전달하기로 선언되지 않는 한 함수의

function get_state($city) { 
    global $mysqli; 

    if ($stmt = $mysqli->prepare("SELECT state FROM country WHERE city = ?")) { 
     $stmt->bind_param("s", $city); 
     $stmt->execute(); 
     $stmt->bind_result($state); 
     $stmt->fetch(); 
     $stmt->close(); 
     echo $state; 
    } 
} 

get_state('la'); 

변수 외부에서 사용할 사용자 정의 함수에 액세스 할 수 없습니다.

0

먼저 오류보고 기능을 활성화해야합니다. $ mysqli가 함수 범위에 존재하지 않기 때문에 객체가 아닌 무언가 (mysqli)에 메서드 (prepare)를 호출한다고 알려줄 것입니다. $ mysqli를 함수에 전달하거나 함수가 해당 변수에 액세스하는 방법에 대한 다른 메커니즘을 고안해야합니다.

0

을 매개 변수로 $mysqli을 전달하고 mysqli 연결 개체를 쿼리에 전달하십시오.

관련 문제