【发布时间】:2011-06-07 05:10:47
【问题描述】:
我无法理解我的继承有什么问题。我只是不能调用父级的大部分功能。下面是我被卡住的功能。
class MySQLi_DB extends mysqli {
private static $_instance = null;
private function __construct($db="test",$host="localhost", $user="root", $pass="")
{
parent::__construct($host, $user, $pass, $db);
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
static public function getDB()
{
if(self::$_instance == null)
{
self::$_instance = new MySQLi_DB();
}
return self::$_instance;
}
public function insert($table,$data)
{
$sql = $this->getQuery($table,$data);
print $sql;
}
public function getQuery($table, $inserts)
{
$lambda = function($value){
return $this->real_escape_string($value);
};
$values = array_map($lambda,$inserts);
$keys = array_keys($inserts);
return 'INSERT INTO `'.$table.'` (`'.implode('`,`', $keys).'`) VALUES (\''.implode('\',\'', $values).'\')';
}
我在调用 real_escape_string() 函数时遇到问题。我试过使用 $this->real_escape_string() 但我只需要看到这个错误
致命错误:不在时使用 $this 对象上下文 D:\wamp\www\Driver\MySQLi_DB.php 上 第 49 行
好的,这可能是 lambda 函数的限制,但我已经通过声明 array_map 的回调来尝试其他方式,该回调也不允许我调用 real_escape_string。
我正在调用如下函数。
require_once 'MySQLi_DB.php';
$db = MySQLi_DB::getDB();
$insert_data = array("cmsId"=>444,"pageName"=>"New Insert");
$db->insert("cms",$insert_data);
请指出我做错了什么以及最好的方法。谢谢
【问题讨论】:
-
real_escape_string() 函数在哪里?
-
如果可能的话,你能发布 MySQLi_DB.php 的第 49 行吗?
-
这是 lambda 函数中的一行