我对使用功能相当陌生,而且我一直是低端"编码器所以我决定花更多的时间来处理正常,安全和高质量的代码。
现在我想在一个.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 :(得分: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.
?>