PHP MySQL数据库类不插入
工作,我一直在使用这个类:PHP MySQL数据库类不插入
<?
class DbConnector {
var $theQuery;
var $link;
function DbConnector() {
$host = 'localhost';
$db = 'my_db';
$user = 'root';
$pass = 'password';
// connect to the db
$this->link = mysql_connect($host, $user, $pass);
mysql_select_db($db);
register_shutdown_function(array(&$this, 'close'));
}
function find($query) {
$ret = mysql_query($query, $this->link);
if (mysql_num_rows($ret) == 0)
return array();
$retArray = array();
while ($row = mysql_fetch_array($ret))
$retArray[] = $row;
return $retArray;
}
function insert($query) {
$ret = mysql_query($query, $this->link);
if (mysql_affected_rows() < 1)
return false;
return true;
}
function query($query) {
$this->theQuery = $query;
return mysql_query($query, $this->link);
}
// get some results
function fetchArray($result) {
return mysql_fetch_array($result);
}
function close() {
mysql_close($this->link);
}
function exists($query) {
$ret = mysql_query($query, $this->link);
if (mysql_num_rows($ret) == 0)
return false;
}
function last_id($query) {
return mysql_insert_id($query);
}
}
?>
其中我使用了大量的查询和它的正常工作,但我想用这个来插入查询:
global $db;
$query = $db->insert("INSERT INTO `submissions` (
`id` ,
`quote` ,
`filename` ,
`date_added` ,
`uploaded_ip`
)
VALUES (
NULL , '{$quote}', '{$filename}', NOW(), '{$_SERVER['REMOTE_ADDR']}')
");
而且它给我这个错误:
Not Found
The requested URL /horh_new/id/<br /><b>Fatal error</b>: Call to a member function insert() on a non-object in <b>/Applications/MAMP/htdocs/horh_new/addit.php</b> on line <b>52</b><br /> was not found on this server.
虽然当我不使用上面这个类,并用此代替:
$con = mysql_connect("localhost","root","password");
if (!$con) {
die('Could not connect: ' . mysql_error());
}
mysql_select_db("my_db", $con);
mysql_query("INSERT INTO `submissions` (
`id` ,
`quote` ,
`filename` ,
`date_added` ,
`uploaded_ip`
)
VALUES (
NULL , '{$quote}', '{$filename}', NOW(), '{$_SERVER['REMOTE_ADDR']}')
");
echo mysql_insert_id();
mysql_close($con);
它工作正常。任何人都可以告诉我我班有什么问题吗?我真的很感激它。
你应该做的像
global $db;
$db = new DbConnector();
或者更好的方式来使用,这是
添加类DbConnector的静态功能,这将在整个请求
public static function getInstance(){
static $instance = null;
if($instance === null){
$instance = new DbConnector();
}
return $instance;
}
只创建一个实例
并使用此类作为
$db = DbConnector::getInstance();
$db->insert($query);
所以'$ db = DbConnector :: getInstance();'基本上只是检查一个实例是否已经创建或尚未?感谢您的快速帮助! – 2011-05-23 10:36:29
这将创建新的实例,如果它尚未被创建,否则它将返回旧的实例。在这种情况下__constructor不应该是公开的。 – Gaurav 2011-05-23 10:53:54
你需要使用它
$db = new DbConnetor();
现在你可以做一个插入
虽然我建议增加一个__construct方法连接到数据库的第一
class DbConnector {
public function __construct() {
// connect to db here
}
是之前实例化对象你确定$ db包含你的类的一个实例吗?也许只是在调用$ db-> insert()之前执行$ db的var_dump()并查看它是否已设置。
那么从那个错误我会说$ db不是你所期望的。转储出来,你看到了什么? – martynthewolf 2011-05-23 08:39:37
您的$ db变量在您遇到该错误的位置未被实例化。 – Repox 2011-05-23 08:40:17