使用php singleton的几个mysqli查询
我有一个非常常见的
mysqli类,为应用程序的其余部分提供数据库连接:
class IabDB extends mysqli { private static $instance = null; // db connection config vars private $user = "xxx-lit"; private $pass = "xxx"; private $dbName = "xxx"; private $dbHost = "xxx"; private function __construct() { parent::__construct($this->dbHost,$this->user,$this->pass,$this->dbName); if (mysqli_connect_error()) { exit('Connect Error (' . mysqli_connect_errno() . ') ' . mysqli_connect_error()); } mysqli_set_charset($this,"utf8"); } public static function getInstance() { if (!self::$instance instanceof self) { self::$instance = new self; } return self::$instance; } 在我的模型中,我检索这样的数据很好地工作: $db = IabDB::getInstance(); $query = $db->query("SELECT status,username,email,id FROM " . $table); $items = $query->fetch_all(); 编辑 相信我:我来回试了一下.两个查询都有效,如果只使用其中一个查询,则返回结果.仅仅为了完整起见,这是第二个模型: class Model { public static function getItems($table) { $db = IabDB::getInstance(); $query = $db->query("SELECT * FROM lit_veranstaltungen"); $items = $query->fetch_all(); $db->close(); var_dump($items); } 所以似乎第二个连接不知何故被打扰了!? 奖金问题:从我的知识来看,显然现在大多数人都嘲笑单身模式似乎对这个目的有好处吗? 非常感谢任何帮助和选择! 解决方法
你的代码适用于我,无论我得到多少实例:
$db = IabDB::getInstance(); $query = $db->query("SELECT name FROM users limit 1"); $items = $query->fetch_all(); var_export($items); $db = IabDB::getInstance(); $query = $db->query("SELECT name FROM users limit 1,1"); $items = $query->fetch_all(); var_export($items); 回报 array ( 0 => array ( 0 => 'John',),) array ( 0 => array ( 0 => 'Mike',) 因此,我认为您运行的特定查询存在错误.因此,您需要为查询提供更好的错误报告.将构造函数更改为此 private function __construct() { mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT); parent::__construct($this->dbHost,$this->dbName); $this->set_charset("utf8"); } 然后确保您的PHP配置如下 error_reporting(E_ALL); ini_set('display_errors',1); 然后再次运行您的代码. 它将报告错误或返回空数组.在后一种情况下,它意味着数据库中没有与您的第二个查询条件匹配的行.例如,对于像这样的代码 $db = IabDB::getInstance(); $query = $db->query("SELECT name FROM users WHERE 1=0"); $items = $query->fetch_all(); var_export($items); $db = IabDB::getInstance(); $query = $db->query("SELECT name FOrM users"); $items = $query->fetch_all(); var_export($items); 它将返回第一个片段的空数组和第二个片段的错误:
另外,我建议你添加这样的功能 public function query_params($query,$params,$types = NULL) { $statement = $this->prepare($query); $types = $types ?: str_repeat('s',count($params)); $statement->bind_param($types,...$params); $statement->execute(); return $statement->get_result(); } 这将允许您像使用PDO一样轻松地使用预准备语句: $user = $db->query_params("SELECT * FROM users WHERE name = ?",['Mike'])->fetch_assoc(); 关于singleton,如果你使用的是旧式程序PHP,那么singleton就可以了.如果您正在使用OOP,那么最好实现基于依赖注入的方法. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |