经过很多小时的故障排除后,我发现我的主机(hosting2go.nl)不支持PDO::mysql,他们只是不安装驱动程序,所以我的Model.php在我的MVC框架是拧。我解决了数据库连接的问题。问题是我对mysqli完全陌生,只是不知道如何制作我的model.php(为PDO编写::mysql)为mysqli编写(而不是PDO),我希望你们能帮助我…我的代码:
|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());
}
}
}
|这是我的模型。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 |类postsModel扩展Model{
function __construct()
{
parent::__construct();
}
public function getAllPosts(){
$result = $this->query(
array(),
"SELECT * FROM posts ORDER BY id DESC"
);
return $result;
}
我无法找到如何使我的模型。php为Mysqli写
事实上,你不可能不痛苦地做这件事。Mysqli既没有bindValue,也不会返回任意结构的数组。
然而,你的Model类是错误的。
- 首先是
- ,由于某种原因,它的第一个参数是$data,所以你总是要写它。
- 接下来,你将捕获一个异常并将其回显出来,这是一个大禁忌
- 最后,我希望你只创建一个模型类的实例以及一个数据库类。
所以,让我建议你使用mysql代替,它是建立在mysql之上的,但比PDO更用户友好和安全。
例如,for 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();
如果你想在将来改变主机,我建议你自己实现PDO接口。在您的主机添加PDO或您更改主机后,您可以轻松切换到本地PDO。
乌利希期刊指南:优点:+您可以测试自己的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();