我有这个:
$db_hostname = 'localhost';
$db_username = 'root';
$db_password = '';
$db_database = 'publications';
保存为connection.php
,但我不能在这个中插入它的变量:
namespace form;
include_once "Form.php";
include_once "connection.php";
class login extends Form
{
public function showLoginfrom()
{
echo '<form name="loginform" method="get">';
$login = new Form();
$login->AddText('username','Your username');
$login->AddPassword('password','','Your password');
$login->SubmitButton('Login');
echo "</form>";
}
public function executeLogin()
{
$connection = new 'mysqli($db_hostname,$db_username,$db_password,$db_database);
$username = ($_GET["username"]);
$password = ($_GET["password"]);
$query ="SELECT * FROM users WHERE username= '$username' AND password= '$password'";
$result = $connection->query($query);
if (mysqli_num_rows($result)== 1)
{
echo "Welcome";
}
else
{
echo "Login failed";
}
}
我知道我的代码是不安全的,我只是在试验。这是我的第一个php程序。
将它们注入方法
例如;
public function executeLogin($db_hostname,$db_username,$db_password,$db_database)
{
$connection = new 'mysqli($db_hostname,$db_username,$db_password,$db_database);
然后用当前作用域中的这些变量调用executeLogin()
方法。
生成属性
有两种方法可以注入它们以生成属性。第一种方法与上述__construct()
方法完全相同。
另一种方法是在__construct()
方法中包含这些文件,并将它们设置为属性。例如
private $arrDbDetails = array();
public function __construct() {
include_once "connection.php";
$this->arrDbDetails = array(
'host' => $db_hostname,
'user' => $db_username,
'pass' => $db_password,
'db' => $db_database
);
然后可以使用$this->arrDbDetails['host']
访问它们,例如,在executeLogin()
方法中。
$connection = new 'mysqli($this->arrDbDetails['host'],$this->arrDbDetails['user'],$this->arrDbDetails['pass'],$this->arrDbDetails['db']);
使用常量
您也可以define
这些值,并将它们放在全局范围内。
define('DB_USERNAME', 'my_mysql_user');
然后将它们作为方法中的正则常量调用。
另一种方法是使用带有静态成员的类。类似于:
class Config {
static public $mysqli;
static public $dbCredentials = [];
}
include('connection.php');
Config::$dbCredentials['host'] = $db_hostname;
// and repeat for the others
//optional, extra step:
Config::$mysqli = new 'mysqli(...);
然后使用,你可以做:
public function executeLogin()
{
$connection = new 'mysqli('Config::$dbCredentials['host'], ..);
//or
$connection = 'Config::$mysqli;
// do other stuff
}
其他注意事项/备选方案:
- 将
config
类放入connection.php
并进行设置从那里 - 使用getter函数(即
public static getConnection()
)获取mysqli连接(可能使用singleton) - 对凭据使用getter/setter函数(即
public static getDbHost()
) - 使用适当的面向对象方法,让
executeLogin
接收一个mysqli
对象,该对象将从调用代码传递