设置数据库信息一次,并在多个PHP函数中使用

时间:2017-03-13 19:55:37

标签: php mysqli prepare

我对使用功能相当陌生,而且我一直是低端"编码器所以我决定花更多的时间来处理正常,安全和高质量的代码。

现在我想在一个.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'];
    }

}

?>

这段代码工作得很好,完全符合我的要求但不知怎的,我觉得我不必将所有数据库信息都放到每个函数中。我想知道是否有办法设置主机,用户名,密码和数据库名称一次,并在我需要的每个功能中使用连接。

正如我之前所说的那样,在将这些值置于函数之外后,我试图将值全局化,但我无法使其工作。

任何建议表示赞赏。提前谢谢!

1 个答案:

答案 0 :(得分: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.
?>