Php mysqli在课堂上不工作
我不熟悉PHP类Php mysqli在课堂上不工作,php,class,mysqli,Php,Class,Mysqli,我不熟悉PHP类 class metacountry { public $mysqli; function metacountry() { global $config; $mysqli=new mysqli($config['DBHostName'],$config['DBUserName'],$config['DBPassword'],$config['DBName']); $mysqli->set_charset("utf8"); if (m
class metacountry
{
public $mysqli;
function metacountry()
{
global $config;
$mysqli=new mysqli($config['DBHostName'],$config['DBUserName'],$config['DBPassword'],$config['DBName']);
$mysqli->set_charset("utf8");
if (mysqli_connect_errno()) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
}
function InsertCountry()
{
$stmt=$mysqli->prepare("insert into tbl_metacountry values(?,?,?,?,?)");
$stmt->bind_param('sssss', $country, $meta_title, $meta_keywords, $meta_description, $active);
$country=addslashes(addcslashes($mysqli->real_escape_string($_POST['country'], "%_")));
$meta_title=addslashes(addcslashes($mysqli->real_escape_string($_POST['meta_title'], "%_")));
$meta_keywords=addslashes(addcslashes($mysqli->real_escape_string($_POST['meta_keywords'], "%_")));
$meta_description=addslashes(addcslashes($mysqli->real_escape_string($_POST['meta_description'], "%_")));
$meta_active=addslashes(addcslashes($mysqli->real_escape_string($_POST['active'], "%_")));
$stmt->execute();
$stmt->close();
}
}
它抛出一个错误:
致命错误:在/var/www/html/country.php中调用null上的成员函数prepare()
必须使用
$this
引用类属性
您的连接:
$mysqli=new mysqli($config['DBHostName'],$config['DBUserName'],$config['DBPassword'],$config['DBName']);
应该是,
$this->mysqli[...]
其他信息
您不应该使用global
,而应该在类中定义数据库设置,使其更加面向对象
阅读材料
您必须使用
$this
来引用类属性
您的连接:
$mysqli=new mysqli($config['DBHostName'],$config['DBUserName'],$config['DBPassword'],$config['DBName']);
应该是,
$this->mysqli[...]
其他信息
您不应该使用global
,而应该在类中定义数据库设置,使其更加面向对象
阅读材料
我希望以下内容有意义——它没有经过测试,但看起来或多或少是正确的。db连接是在公共构造函数中创建的,为了清晰起见,使用
$this->conn
引用它-当然,您可以根据需要将其重命名为任何名称
<?php
class metacountry{
private $conn;
private $config;
public function __construct($config=array()){
/* initialise actual values at runtime */
$this->config=(object)array_merge(array(
'DBHostName' => false,
'DBUserName' => false,
'DBPassword' => false,
'DBName' => false
),$config);
$this->conn=new mysqli( $this->config->DBHostName, $this->config->DBUserName, $this->config->DBPassword, $this->config->DBName );
$this->conn->set_charset("utf8");
if( $this->conn->connect_errno ) {
printf( "Connect failed: %s\n", $this->conn->connect_error );
exit();
}
}
function InsertCountry(){
$stmt=$this->conn->prepare("insert into `tbl_metacountry` values (?,?,?,?,?)");
$stmt->bind_param('sssss', $country, $meta_title, $meta_keywords, $meta_description, $active );
$country=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['country'], "%_" ) ) );
$meta_title=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['meta_title'], "%_" ) ) );
$meta_keywords=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['meta_keywords'], "%_" ) ) );
$meta_description=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['meta_description'], "%_" ) ) );
$meta_active=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['active'], "%_" ) ) );
$stmt->execute();
$stmt->close();
}
}
/* example */
$config=array(
'DBHostName'=>'localhost',
'DBUserName'=>'root',
'DBPassword'=>'password',
'DBName' =>'mydb'
);
$meta=new metacountry( $config );
if( $_SERVER['REQUEST_METHOD']=='POST' ) $meta->InsertCountry();
$meta=null;
?>
我希望以下内容有意义——它没有经过测试,但看起来或多或少是正确的。db连接是在公共构造函数中创建的,为了清晰起见,使用
$this->conn
引用它-当然,您可以根据需要将其重命名为任何名称
<?php
class metacountry{
private $conn;
private $config;
public function __construct($config=array()){
/* initialise actual values at runtime */
$this->config=(object)array_merge(array(
'DBHostName' => false,
'DBUserName' => false,
'DBPassword' => false,
'DBName' => false
),$config);
$this->conn=new mysqli( $this->config->DBHostName, $this->config->DBUserName, $this->config->DBPassword, $this->config->DBName );
$this->conn->set_charset("utf8");
if( $this->conn->connect_errno ) {
printf( "Connect failed: %s\n", $this->conn->connect_error );
exit();
}
}
function InsertCountry(){
$stmt=$this->conn->prepare("insert into `tbl_metacountry` values (?,?,?,?,?)");
$stmt->bind_param('sssss', $country, $meta_title, $meta_keywords, $meta_description, $active );
$country=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['country'], "%_" ) ) );
$meta_title=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['meta_title'], "%_" ) ) );
$meta_keywords=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['meta_keywords'], "%_" ) ) );
$meta_description=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['meta_description'], "%_" ) ) );
$meta_active=addslashes( addcslashes( $this->conn->real_escape_string( $_POST['active'], "%_" ) ) );
$stmt->execute();
$stmt->close();
}
}
/* example */
$config=array(
'DBHostName'=>'localhost',
'DBUserName'=>'root',
'DBPassword'=>'password',
'DBName' =>'mydb'
);
$meta=new metacountry( $config );
if( $_SERVER['REQUEST_METHOD']=='POST' ) $meta->InsertCountry();
$meta=null;
?>
谢谢,实际上我对类是新手,实际上我想在构造函数方法中创建一个mysqli对象,并在类中的其他方法中使用它。如果你能编辑我的问题并在这里发布,那将非常有帮助ful@SugumarVenkatesan那么我认为你应该从头开始,不要跳进数据库类。了解类的一般情况,并使用试错法来习惯类中涉及的特性。如果答案对您有帮助,请接受。当使用任何一种方法时,我都会得到“Class'CronClass\mysqli'notfound”。@user2924019但是,在new mysqli
之前,您应该问一个新问题,所以new\mysqli(…)代码>,这将检查mysqli类的全局命名空间,而不是您的类的命名空间。我的英雄!我本打算提出一个新问题,但由于人们认为我已经有了答案,我担心被否决,我的账户被关闭。如果\成功了,我很困惑,为什么我在这个问题上找到的所有例子似乎都不需要\。谢谢。谢谢,实际上我是新来的类。实际上我想在构造函数方法中创建一个mysqli对象,并在类中的其他方法中使用它。如果你能编辑我的问题并在这里发布,那将非常有帮助ful@SugumarVenkatesan那么我认为你应该从头开始,不要跳进数据库类。了解类的一般情况,并使用试错法来习惯类中涉及的特性。如果答案对您有帮助,请接受。当使用任何一种方法时,我都会得到“Class'CronClass\mysqli'notfound”。@user2924019但是,在new mysqli
之前,您应该问一个新问题,所以new\mysqli(…)代码>,这将检查mysqli类的全局命名空间,而不是您的类的命名空间。我的英雄!我本打算提出一个新问题,但由于人们认为我已经有了答案,我担心被否决,我的账户被关闭。如果\成功了,我很困惑,为什么我在这个问题上找到的所有例子似乎都不需要\。谢谢。我一直收到“找不到MyClass\mysqli”。我一直收到“找不到MyClass\mysqli”。