我有这个:
$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程序。
答案 0 :(得分:1)
例如;
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');
然后在你的方法中将它们称为常规常量。
答案 1 :(得分:0)
另一种方法是使用带有静态成员的类。类似的东西:
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
并进行设置
从那里。 public static
getConnection()
)获取mysqli连接(可能使用单例)public static getDbHost()
)executeLogin
接收一个mysqli
对象,该对象将从调用代码传递。