| ORIGINAL PDO MODEL.PHP |
class Model
{
function __construct()
{
$this->db = new Database;
$this->data = $_POST;
}
public function query( $data = array(), $query){
try{
$result = $this -> db -> prepare($query);
$result->execute($data);
$result = $result->fetchAll(PDO::FETCH_ASSOC);
return $result;
}catch(PDOException $e){
echo $e;
}
}
|我的数据库连接|
class Database extends mysqli {
public function __construct() {
parent::__construct("localhost","root","","bartsite");
if (mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '
. mysqli_connect_error());
}
}
}
|这就是我对我的model.php for MYSQLI |
所做的class Model
{
function __construct()
{
$this->db = new Database;
$this->data = $_POST;
}
public function query( $data = array(), $query){
try{
echo $query;
$result = $this -> db -> prepare($query);
$result = $this -> db -> query($data);
$result->fetch_all();
//$result->execute($data);
//$result = $result->fetchAll(PDO::FETCH_ASSOC);
}catch(PDOException $e){
echo $e;
}
}
}
|控制器|
的有用部分public function index(){
$data = $this->posts->getAllPosts();
var_dump($data);
$this->view->render("posts/index",$data);
return true;
}
| posts.models.php | class postsModel扩展了Model {
function __construct()
{
parent::__construct();
}
public function getAllPosts(){
$result = $this->query(
array(),
"SELECT * FROM posts ORDER BY id DESC"
);
return $result;
}
答案 0 :(得分:2)
我无法找到如何使我的model.php写入Mysqli
事实上,如果没有很多痛苦,你就无法做到。 Mysqli既没有bindValue,也没有返回任意结构的数组。
然而,你的Model类错了。
所以,让我建议你safeMysql,它建立在mysqli之上,但比PDO更加用户友好和安全。
说,对于postsModel
class postsModel {
function __construct(safeMysql $db)
{
$this->db = $db;
}
public function getAllPosts(){
return $this->db->getAll("SELECT * FROM posts ORDER BY id DESC")
}
}
$db = new safeMysql();
$model = new postsModel($db);
$posts = $model->getAllPosts();
答案 1 :(得分:-1)
如果您有意在未来更改托管,我建议您自己实施PDO界面。在您的主机添加PDO或您更改主机后,您可以切换到本机PDO无痛。
<强> UPD:强> 优点: +您可以测试自己的PDO实现以与规范PDO兼容 +这样你就可以轻松迁移
缺点: - 要做很多工作
可能的hack:部分实现PDO接口,只有你真正使用的东西
<强> UPD-2 强> 你可以得到新的主机并忘记这个,如果你不要惹恼mysqli_ *和其他更具成本效益。它也取决于你的代码库:改变几个方法没有问题,但不是一个巨大的cms或类似的东西。所以选择取决于你。
<强> UPD-3 强>
使用此代码替换Model
中的try-catch块
echo $query;
$stmnt = $this -> db -> prepare($query);
// bind params to statement from $data here
if (false === $stmnt->execute()) {
// error
echo $e;
return;
}
$result = $stmt->get_result();