2017-03-13 5 views
0

저는 함수를 사용하는 데 상당히 익숙하며 항상 "로우 엔드"코더 였기 때문에 정상적이고 안전하며 품질이 좋은 코드 작업에 더 많은 시간을 투자하기로 결정했습니다.데이터베이스 정보를 한 번 설정하고 여러 PHP 함수에서 사용

이제 하나의 .php 파일에서 여러 기능을 사용하고자하므로 모든 데이터베이스 정보를 한 번 설정하고 필요로하는 모든 기능에서 사용하지 않아도됩니다. 나는 그것을 세계화시키지 않거나 아무것도하지 않는 것으로 잘못하고 있다고 생각하지만 모든 종류의 다른 조합을 시도했다. 아무도 작동하지 않습니다.

이 내 코드는 지금 :

<?php 

function getExperience($userid) { 

$dbHost  = "*"; 
$dbUsername = "*"; 
$dbPassword = "*"; 
$dbName  = "*"; 

$conn = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName); 

$sql = "SELECT * FROM experience WHERE userid = ?"; 

$stmt = $conn->prepare($sql); 
$stmt->bind_param('i', $userid); 
$stmt->execute(); 

$result = $stmt->get_result(); 

    while ($print = $result->fetch_assoc()){ 
     echo $print['employer']; 
    } 

} 

?> 

이 코드는 잘 작동하고 내가 그것을 수행 할 작업을 정확하게 수행하지만, 어떻게 든 나는 각각의 기능에 모든 데이터베이스 정보를 넣을 필요가 없습니다 느낀다 . 나는 호스트, 사용자 이름, 암호 및 db 이름을 한 번 설정하고 필요한 각 기능에서 연결을 사용하는 방법이 있는지 알고 싶습니다.

필자는 전역 값을 함수 외부에 둡니다.하지만 그 값을 작동시키지 못했습니다.

모든 조언을 주시면 감사하겠습니다. 미리 감사드립니다!

답변

0

스크립트에서 연결을 사용하여 데이터베이스에 과부하가 발생하지 않도록 데이터베이스를 한 번 호출해야합니다. 여러 개의 SQL 문을 실행할 수 있도록 원래 연결을 공유하는 것이 더 좋습니다. 당신이하고 싶은 것을 정확히 알지 못하면, 이것이 더 이상 부 풀릴 수 있는지 알기가 어렵습니다.

//tested - works 
<?php 

$dbHost  = "localhost"; 
$dbUsername = "x"; 
$dbPassword = "x"; 
$dbName  = "test"; 

$conn = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName); 

function getExperience($dbcon, $userid) { 

    $output = ""; 

    $sql = "SELECT * FROM experience WHERE userid = ?"; 

    $stmt = $dbcon->prepare($sql); //can fail if SQL statement isnt valid; 
    $stmt->bind_param('i', $userid); 
    $stmt->execute(); 

    $result = $stmt->get_result(); 

    if($result->num_rows == 1){ 
     $print = $result->fetch_assoc(); 
     $output = $print['employer']; 
    } 
    else { 
     while ($print = $result->fetch_assoc()){ 
      $output .= $print['employer'] .", "; 
     } 
    } 

    $stmt->close(); 
    return $output; 

} 

echo "testing loop for function <br />"; 
//example 
for($i = 0; $i <= 10; $i++) { 
    echo $i . "<br />"; 
    echo getExperience($conn, $i); 
    echo "<br />"; 
} 

$conn->close(); // always good to close your connection after completed. 
?> 
+0

실제로 닫는 것이 좋습니다. 그걸 잊어 버렸어. 비록 이것이 어떻게 작동할지 모르겠습니다. 이 스크립트에서 $ dbcon은 무엇을합니까? 함수 내에서 변수를 어떻게 사용할 수 있습니까? 그것은 세계적이든 다른 것이어야하지 않습니까? 내가이 방법을 시도 할 때마다 그것은 실패 할 것이다. 귀하의 답변 주셔서 감사합니다! 해야 할 일에 관해서는 : 그것은 단순히 db로부터 정보를 취하여 사용자에게 보여줄 것입니다. 아무것도 덜 아무것도. – user3299251

+0

필자는 이것을 php 5.4에서 테스트했으며 작동했습니다. 그래서 나는 왜 그것이 당신을 위해 일하지 않을지 모르겠다. 방금 함수 변수를 다른 것으로 명명 했으므로 연결이 함수로 전달되는 방법이 더 명확합니다. 또한 for 루프를 함수의 테스트 에이전트로 추가했습니다. – thebtm