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