通过清心醉

opencart二次开发之MVC的结构及模板使用规则3

本文节主要讲述OPENCART的数据库中的提取数这一项

今天郁闷的就是提取数据了,正常的PDO的方式都是使用$data->fetchAll()来获取,OC已经修改过了它的核心,所以要提取数据就需要一定的办法。

看了会OC的MPDO/DB文件,DB文件是调用链接数据库的各种操作。

因为作者习惯于PDO的方式,所以查看了下

public function __construct($hostname, $username, $password, $database, $port = ‘3306’) {
try {
$this->pdo = new \PDO(“mysql:host=” . $hostname . “;port=” . $port . “;dbname=” . $database, $username, $password, array(\PDO::ATTR_PERSISTENT => true));
} catch(\PDOException $e) {
trigger_error(‘Error: Could not make a database link ( ‘ . $e->getMessage() . ‘). Error Code : ‘ . $e->getCode() . ‘ <br />’);
exit();
}

$this->pdo->exec(“SET NAMES ‘utf8′”);
$this->pdo->exec(“SET CHARACTER SET utf8”);
$this->pdo->exec(“SET CHARACTER_SET_CONNECTION=utf8”);
$this->pdo->exec(“SET SQL_MODE = ””);

}

OC利用构造的方式创建连接并且设置编码(不过他这设置的编码作者在开发的时候,发现写入的中文是乱码,还得继续研究下)

我们来看看query查询的方法:

public function query($sql, $params = array()) {
$this->statement = $this->pdo->prepare($sql); //执行预处理
$result = false;

try {
if ($this->statement && $this->statement->execute($params)) {
$data = array();
//定义数组
while ($row = $this->statement->fetch(\PDO::FETCH_ASSOC)) {
//循环提取数组到
$data[] = $row;
}

$result = new \stdClass();
$result->row = (isset($data[0]) ? $data[0] : array());
$result->rows = $data;
$result->num_rows = $this->statement->rowCount();
#var_dump($result);die();
}
} catch (\PDOException $e) {
trigger_error(‘Error: ‘ . $e->getMessage() . ‘ Error Code : ‘ . $e->getCode() . ‘ <br />’ . $sql);
exit();
}

if ($result) {
return $result;
} else {
$result = new \stdClass();
$result->row = array();
$result->rows = array();
$result->num_rows = 0;
return $result;
}
}

OC已经重新修改了预处理的方式

今天最郁闷的就是无法提取数据和中文乱码

先来说第一个的解决方法:

假设我们有个模型需要提取数据库里的全部数据,或者指定行数的数据:

<?php
class ModelContactContact extends Model
{
public function datetable() //获取数据库中的信息
{
$sql=”SELECT *FROM contact”;
$data=$this->db->query($sql); //提取全部数据
return $data->rows; //返回的跟是必须是获取所有的 如果是单行可以使用$data->row;
}
}

至于写入中文乱码(因为和环境无关,因为其他的写入是正常的),明天测试后公布!

 

关于作者

清心醉 administrator

发表评论

请输入验证码: