好的......首先我读了这篇文章..
http://net.tutsplus.com/tutorials/php/6-codeigniter-hacks-for-the-masters/
在第一次黑客攻击中,它说我是否将这些内容包含在我的config.php
文件中:
function __autoload($class) {
if (file_exists(APPPATH."models/".strtolower($class).EXT)) {
include_once(APPPATH."models/".strtolower($class).EXT);
}
}
我不需要将我的模型类扩展到CI_Model。
然后我尝试在我的模型类中使用$this->db->select('email')->from('users')->where('email', $email);
。CodeIgniter告诉我找不到“db”属性。有没有人曾经尝试过这种黑客并知道如何让它发挥作用?
class User {
public $id;
public $email;
public $displayName;
public $password;
public static function search_by_email($email) {
$user = new User;
$user->db->select('email')->from('users')->where('email', $email);
$query = $user->db->get();
if ($query->num_rows()==0) {
return false;
}else {
foreach ($query->result() as $key => $val) {
$user->email = $val['email'];
$user->displayName = $val['displayName'];
return $user;
}
}
return null;
}
当我在控制器中调用静态函数时,我使用:
$user = User::search_by_email("xxx@gmail.com");
如果我不扩展用户,则会显示CI警告:Message: Undefined property: User::$db
。如果我使用User extends CI_Model {}
,服务器将崩溃。
有没有人对这种情况有所了解?
编辑:
然后我抛弃了愚蠢的Nettus'教程代码,谢谢你们......但我的模型仍然无效:
class User extends CI_Model {
public $id;
public $email;
public $displayName;
public $password;
public function search_by_email($email) {
$user = new User();
$this->db->select('email')->from('users')->where('email', $email);
$query = $this->db->get();
if ($query->num_rows()==0) {
return false;
}else {
foreach ($query->result() as $key => $val) {
$user->email = $val['email'];
$user->displayName = $val['displayName'];
return $user;
}
}
return null;
}
在我的控制器中,我使用:
$this->load->model('User');
$user = $this->User->search_by_email("leo.niecn@gmail.com");
我的服务器仍然崩溃.....我禁止在我的模型中编写类public $id
等类变量吗?
答案 0 :(得分:1)
这部分代码没有任何意义:
function __autoload($class) {
if (file_exists(APPPATH . "models/" . strtolower($class).EXT)) {
include_once(APPPATH . "models/" . strtolower($class).EXT);
}
}
只要您可以从autoload.php
文件夹下的config
加载模型,或者在需要模型时执行以下操作:
$this->load->model('model_name');
然后只需调用你的函数。