2017-03-13 26 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']; 
    } 

} 

?> 

此代码工作得很好,究竟做什么,我想要它做的,但不知何故我觉得我没有把所有的数据库信息到每个功能。我很想知道是否有一种方法来设置主机,用户名,密码和数据库名称一次,并使用连接在我需要它的每个功能。

正如我之前所说的,我试图在将它们放在函数之外之后将值全局化,但是我无法使其工作。

任何意见表示赞赏。提前致谢!

回答

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在这个脚本中做了什么?而且你怎么能在函数的顶部使用变量?它不应该是全球性的吗?每当我尝试这种方式,它会失败。感谢您的回答!至于应该做什么:它会简单地从数据库中获取一些信息并显示给用户。没有什么比这更少。 – user3299251

+0

我在php 5.4中测试过它,它工作。所以我不知道为什么它不适合你。我只是将函数变量命名为不同的东西,所以更清楚地知道连接是如何传递给函数的。我还添加了for循环作为函数的测试代理。 – thebtm

相关问题