Php 从PDO到MySQLI的翻译

Php 从PDO到MySQLI的翻译,php,pdo,mysqli,Php,Pdo,Mysqli,经过长时间的故障排除,我发现我的hoster(hosting2go.nl)不支持PDO::mysql,他们只是没有安装驱动程序,所以我的MVC框架中的Model.php就完蛋了。我解决了数据库连接的问题。问题是我对mysqli完全陌生,justr无法找到如何使我的model.php(writen for PDO::mysql)为mysqli(而不是PDO)编写。我希望你们能帮助我。。。 我的代码: |原始PDO MODEL.PHP| class Model { function __co

经过长时间的故障排除,我发现我的hoster(hosting2go.nl)不支持PDO::mysql,他们只是没有安装驱动程序,所以我的MVC框架中的Model.php就完蛋了。我解决了数据库连接的问题。问题是我对mysqli完全陌生,justr无法找到如何使我的model.php(writen for PDO::mysql)为mysqli(而不是PDO)编写。我希望你们能帮助我。。。 我的代码:

|原始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());
        }
    }
}
|这是我为MYSQLI制作的model.php|

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| 类postsModel扩展了模型 {


如果您打算将来更改主机,我建议您自己实现PDO接口。在您的主机添加PDO或更改主机后,您可以切换到本地PDO

UPD: 赞成的意见: +您可以测试自己的PDO实现是否与规范PDO兼容 +因此,您可以轻松地进行迁移

缺点: -有很多工作要做

可能的黑客:部分实现PDO接口,只实现您真正使用的东西

UPD-2 如果不弄乱mysqli_*和其他东西对你来说更划算的话,你可以得到一个新的主机,忘掉这个。这也取决于你的代码库:改变一些方法是没有问题的,但不是一个巨大的cms或类似的东西。所以选择取决于你

UPD-3

用此代码替换
型号中的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();
我不知道如何为Mysqli编写model.php

事实上,你不可能不费吹灰之力就能做到这一点。Mysqli既没有bindValue,也不能返回任意结构的数组

然而,你的模型课是错误的

  • 首先,出于某种原因,它将$data作为第一个参数,这使得您必须始终编写它
  • 接下来,您将捕获一个异常以将其响应出来,这是一个很大的“不”
  • 最后,我希望您只创建模型类的一个实例以及任何数据库类的一个实例
所以,让我来建议你,它是建立在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();

你可能会发现有用这不是我的问题,我被要求使用mysqli,必须重写model.php我需要一些帮助。dbcon没有问题。在我的问题之后。我会看一看你的链接tereskoi重写了我的数据库类,现在我必须调整我的模型。这是模型类的真实示例还是仅仅是一个sketch?如果是,可以吗我看到了一个更合理的功能,它能做一些有用的事情?只是为了能够翻译它是的,但我已经付了一年的钱,…而且学习一些新的东西从来没有错。这是我在这家公司的最后一次托管。有没有退款或什么的?只是35欧元。没有太多的教训,你必须检查可用的扩展和o首先是其他东西。我也有这样的经验,所以我可以建议你忘记那个混蛋,不要干扰PDO的实现。你的时间可能会花得更多。@user2057856正如我在回答中告诉你的,它不会工作。你几乎不能让它只在空数据下工作。
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();