如何解决此错误:致命错误:在第53行的C:\xampp2\htdocs\digikalamvc\core\model.php中的字符串上调用成员函数prepare()
如果静态调用方法,它不会调用类构造函数 你得到这个错误是因为你有这个如何解决此错误:致命错误:在第53行的C:\xampp2\htdocs\digikalamvc\core\model.php中的字符串上调用成员函数prepare(),php,Php,如果静态调用方法,它不会调用类构造函数 你得到这个错误是因为你有这个 <?php class Model { public static $conn = ''; public $totalMenu = array(); function __construct() { $servername = 'localhost'; $username = 'root'; $password = '';
<?php
class Model
{
public static $conn = '';
public $totalMenu = array();
function __construct()
{
$servername = 'localhost';
$username = 'root';
$password = '';
$dbname = 'digi_mvc';
$attr = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
self::$conn = new PDO('mysql:host=' . $servername . ';dbname=' . $dbname, $username, $password, $attr);
self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (function_exists('jdate') == false) {
require('public/jdf/jdf.php');
}
}
public static function getoption()
{
$sql = "select * from tbl_option";
$stmt = self::$conn->prepare($sql);
?>
作为默认值,它是一个字符串,因此当您调用它时,您显然会得到您得到的错误
如何修复它,那么这个类的结构基本上是toast
因此,您需要首先调用construct,或者最好将连接设为静态并进行检查
因此,与其构造,不如将其更改为
public static $conn = '';
然后用另一种方法,
public static $conn; //change this to null, it will be a touch easier to check
public static function connect() ///__construct()
{
$servername = 'localhost';
$username = 'root';
$password = '';
$dbname = 'digi_mvc';
$attr = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
self::$conn = new PDO('mysql:host=' . $servername . ';dbname=' . $dbname, $username, $password, $attr);
self::$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if (function_exists('jdate') == false) {
require('public/jdf/jdf.php');
}
}
差不多吧
这样,当您调用getoption
时,它将检查$conn
是否为false,如果为false,它将调用connect,如果不是,则我们已从以前的调用调用connect
作为补充,您缺少最后两个}
一个关闭getoption
一个关闭类,但我认为这只是问题中的一个输入错误
我要说的最后一件事是,混合和匹配静态和非静态方法通常不是一个好主意,在某些情况下,这是可行的。但总的来说,他们彼此并不友好。您将陷入一种失去对象状态的情况
您可以使用的另一种模式称为“Singleton”,IMO(有些人不同意)在数据库类中可以很好地使用它。但是我不会在这里深入讨论它,因为如果需要更多信息,您可以在谷歌上搜索该模式。您是否在调用
getoption()
而不生成Model
的新对象?因为在这种情况下,$conn=''
不是您的PDO
public static function getoption()
{
if(!self::$conn) self::connect();
//.... rest of code...