2013-04-29 52 views
0

經過很多小時的排除故障後,我發現我的主機(hosting2go.nl)不支持PDO :: mysql,他們只是不安裝驅動程序,所以我的Model.php在我的MVC框架中被搞砸了。我解決了我的數據庫連接問題。問題是,我是完全陌生的mysqli和justr無法找到如何使我的model.php(寫爲PDO :: mysql)寫Mysqli(而不是PDO),我希望你們可以幫助我... 我的代碼:從PDO翻譯成MySQLI

| 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所做的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; 
     } 
    } 
} 

| usefull part f the controller |

public function index(){ 
    $data = $this->posts->getAllPosts(); 
    var_dump($data); 
    $this->view->render("posts/index",$data); 
    return true; 
} 

| posts.models.php | 類postsModel擴展型號 {

function __construct() 
{ 
    parent::__construct(); 
} 

public function getAllPosts(){ 
    $result = $this->query(
     array(), 
     "SELECT * FROM posts ORDER BY id DESC" 
    ); 
    return $result; 
} 
+0

你可能會發現[這](http://stackoverflow.com/a/11369679/727208)有用 – 2013-04-29 12:07:47

+0

那不是我的問題,即時通訊pressued使用的mysqli並有重寫我的model.php我想要一些幫助。 dbcon是沒有問題的。 – 2013-04-29 12:22:17

+0

和我的問題後。我會明確地看看你的鏈接teresko – 2013-04-29 12:30:41

回答

-1

如果你在你的心中,以改變在未來主辦,我建議你自己來實現PDO接口。在您的主機添加PDO或更換主機後,您可以輕鬆切換到本地PDO。

UPD: 優點: +,你可以測試自己的PDO實施與規範PDO +兼容,所以你可以很容易遷移

缺點: - 很多工作要做

可能的黑客:實現PDO接口部分,只有這些東西你真的使用

UPD-2 你只要獲得新的託管服務並忘記了這一項,如果不會導致mysqli_ *等問題變得更具成本效益。這也取決於你的代碼庫:改變幾個方法沒有問題,但不是一個巨大的CMS或類似的東西。所以選擇取決於你。與此代碼

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(); 
+0

是的,但我已經支付了一年,..它是永遠不會錯的學習新的東西。 – 2013-04-29 12:28:26

+0

這是我最後一次與這家公司合作。 – 2013-04-29 12:29:02

+0

有退款嗎? – pinepain 2013-04-29 12:29:11

2

I can't find out how to make my model.php writen for Mysqli

由於事實上

UPD-3

代替try-catch塊中Model,你不能做到這一點沒有痛苦的LOT 。 Mysqli既沒有bindValue,也沒有返回任意結構的數組。

儘管如此,您的模型類是錯誤的。

  • 首先,由於某種原因,它有$數據作爲第一個參數,讓你總是寫它。
  • 接下來,你正在捕捉一個異常來回應它,這是一個很大的禁忌,最後,我希望你只創建一個Model類的實例以及任何一個Database類。

因此,建議您改爲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();