PHP 页面空白 - 不了解范围
PHP Page Blank - Not understanding scopes
所以,简而言之,我觉得这段代码应该可以工作。从字面上看,此刻我只是想创建一个 PHP class 来获取一些信息并对数据库运行命令。我知道该命令有效,所以不是那样,它与我的变量范围有关。
我是 PHP 的新手,处理起来很有趣。
<?php
require __DIR__ . '/../bin/composer/vendor/autoload.php';
$cx = new Customer();
$cx->WriteCxToDB();
class Customer {
public $database = new medoo([
'database_type'=>'mysql',
'database_name'=>'dbname',
'server'=>'localhost',
'username'=>'dbusername',
'password'=>'dbpassword',
'charset'=>'utf8'
]);
public function WriteCxToDB(){
global $database;
if($database->has("customer", [
"OR"=>[
"username"=>"cxusername",
"email"=>"email@gmail.com"
]
]))
{
echo "User already exists";
}else{
$database->insert("customer", [
"username"=>"username",
"keyword"=>"keyword",
"email"=>"email@gmail.com",
"phone"=>"444-444-4444",
"first_name"=>"First",
"last_name"=>"Last"
]);
echo "User added";
}
echo "Done";
}
}
?>
我正在使用 composer 和 medoo 来做这个数据库条目。我知道数据库代码可以工作,因为我 运行 它自己运行并且运行良好。
我正在努力解决的问题似乎是代码中的变量 $database
。如果我从混合中删除该变量,函数调用将起作用。我觉得我只是不明白我应该在哪里声明变量/如何从函数内部/外部引用它。谢谢
这里的问题是全局作用域的使用。而不是:
global $database;
if($database->has("customer",
使用
if($this->database->has("customer",
你也可以考虑在构造函数中实例化 $database,即
private $database;
public function __construct() {
$this->database = new medoo([args....
正如前面示例中所建议的那样,您应该使用类似的东西并将数据库连接传递到 class,扩展基础 class 将允许重用数据库连接:
private $database;
public function __construct($db_connection = null){
//do stuff or set db
$this->database = $this->db_connect;
}
或者在 class 中创建一个方法来做到这一点
private function db_connect(){
return new medoo([
// required
'database_type' => 'mysql',
'database_name' => 'name',
'server' => 'localhost',
'username' => 'your_username',
'password' => 'your_password',
'charset' => 'utf8',
]);
}
检查并考虑捕获错误。在数据库上使用唯一键或主键将是一种更安全的方法,否则您必须在数据库上进行验证和搜索。添加密钥并检查重复错误。
if($database->error()){
//deal with return or pass to logging
}
所以,简而言之,我觉得这段代码应该可以工作。从字面上看,此刻我只是想创建一个 PHP class 来获取一些信息并对数据库运行命令。我知道该命令有效,所以不是那样,它与我的变量范围有关。
我是 PHP 的新手,处理起来很有趣。
<?php
require __DIR__ . '/../bin/composer/vendor/autoload.php';
$cx = new Customer();
$cx->WriteCxToDB();
class Customer {
public $database = new medoo([
'database_type'=>'mysql',
'database_name'=>'dbname',
'server'=>'localhost',
'username'=>'dbusername',
'password'=>'dbpassword',
'charset'=>'utf8'
]);
public function WriteCxToDB(){
global $database;
if($database->has("customer", [
"OR"=>[
"username"=>"cxusername",
"email"=>"email@gmail.com"
]
]))
{
echo "User already exists";
}else{
$database->insert("customer", [
"username"=>"username",
"keyword"=>"keyword",
"email"=>"email@gmail.com",
"phone"=>"444-444-4444",
"first_name"=>"First",
"last_name"=>"Last"
]);
echo "User added";
}
echo "Done";
}
}
?>
我正在使用 composer 和 medoo 来做这个数据库条目。我知道数据库代码可以工作,因为我 运行 它自己运行并且运行良好。
我正在努力解决的问题似乎是代码中的变量 $database
。如果我从混合中删除该变量,函数调用将起作用。我觉得我只是不明白我应该在哪里声明变量/如何从函数内部/外部引用它。谢谢
这里的问题是全局作用域的使用。而不是:
global $database;
if($database->has("customer",
使用
if($this->database->has("customer",
你也可以考虑在构造函数中实例化 $database,即
private $database;
public function __construct() {
$this->database = new medoo([args....
正如前面示例中所建议的那样,您应该使用类似的东西并将数据库连接传递到 class,扩展基础 class 将允许重用数据库连接:
private $database;
public function __construct($db_connection = null){
//do stuff or set db
$this->database = $this->db_connect;
}
或者在 class 中创建一个方法来做到这一点
private function db_connect(){
return new medoo([
// required
'database_type' => 'mysql',
'database_name' => 'name',
'server' => 'localhost',
'username' => 'your_username',
'password' => 'your_password',
'charset' => 'utf8',
]);
}
检查并考虑捕获错误。在数据库上使用唯一键或主键将是一种更安全的方法,否则您必须在数据库上进行验证和搜索。添加密钥并检查重复错误。
if($database->error()){
//deal with return or pass to logging
}