【发布时间】:2013-10-21 01:31:54
【问题描述】:
我试图创建一个类似于大多数 cms 的数据库类,所以我在一个函数中建立连接并返回连接对象以用于类中其他函数的查询..
<?php
class my_database {
var $host = 'localhost';
var $user = 'prince';
var $pass = 'abcd1234wxyz';
var $db = 'world';
function __construct() {
$this->db_connect();
}
function db_connect() {
$mysqli = mysqli_connect($host,$user,$pass,$db);
/* check connection */
if (!$mysqli) {
printf("Connect failed: %s\n", mysqli_connect_error());
exit();
}
return $mysqli;
}
function query($query) {
$mysqli = $this->db_connect();
if ($result = mysqli_query($mysqli, $query)) {
while ($row = mysqli_fetch_row($result)) {
echo "<pre>";
print_r($row);
echo "</pre>";
}
mysqli_free_result($result);
} else
echo "fails"; exit;
}
}
$database = new my_database;
/*************** Class Ends ****************************/
function get_results() {
global $database;
$database->query("select * from city limit 10");
}
get_results();
?>
它总是输出fails,我是 Oops & mysqli 的新手,也许我遗漏了一些明显的东西。
请帮忙!
【问题讨论】:
-
您应该阅读有关 OOP PHP 的教程,因为您正在犯一些基本的错误,这些错误已被每个 tut 所涵盖。
-
还有什么错误?
-
属性与变量不同,不能简单地通过名称来调用,您必须使用对象运算符。因此,如果您想访问属于您当前所在对象的成员的属性,您可以使用
$this->property_name。此外,您正在使用过时的可见性属性(var是 PHP4,虽然它仍然支持向后兼容,但您应该使用public、protected或private关键字)。全局变量也很调皮,你应该阅读依赖注入。 -
您不应该在每次要进行查询时都连接。就像 Lajos Veres 所说,你应该把 mysql 资源作为一个属性,这样你就不需要每次都重新连接
-
我能得到如何正确操作的代码吗?
标签: php class oop mysqli database-abstraction