建议增加pdo操作mysql

#1 homexigua

建议增加pdo操作mysql,我用了论坛上的sqlite pdo那个文件,出错·!

2010-04-09 15:31:06

#2 jake

model的其他数据库驱动和view的其他引擎驱动,目前已经提上了sp的开发日程。:handshake

2010-04-09 15:36:04

#3 jake

建议增加pdo操作mysql,我用了论坛上的sqlite pdo那个文件,出错·!
homexigua 发表于 2010-4-9 15:31
对了,能否说一下,出错提示是什么?

2010-04-09 21:29:00

#4 homexigua

这是db_pdo文件
class db_pdo{
        /**
         * 数据库链接句柄
         */
        private $conn;
        /**
         * 执行的SQL语句记录
         */
        public $arrSql;

        /**
         * 按SQL语句获取记录结果,返回数组
         *
         * @param sql  执行的SQL语句
         */
        public function getArray($sql)
        {
                if( ! $result = $this->exec($sql) )return FALSE;
               
                if( ! $rows = $result->fetchAll() )return FALSE;
               
                // if( ! $rows = $result->fetch(PDO::FETCH_ASSOC) )return FALSE;
               
                $this->arrSql[] = $sql;
               
                return $rows;
        }
       
        /**
         * 返回下一个插入的主键ID
         */
        public function newinsertid()
        {
                return $this->conn->lastInsertId();
        }

        /**
         * 执行一个SQL语句
         *
         * @param sql 需要执行的SQL语句
         */
        public function exec($sql)
        {
                $this->arrSql[] = $sql;
                if( $result = $this->conn->prepare($sql)) {
            $result->execute();
                        return $result;
                }else{
                        $errorInfo = $this->conn->errorInfo();
                        spError("{$sql}
执行错误: " . $errorInfo[2]);
                }
        }

        /**
         * 获取数据表结构
         *
         * @param tbl_name  表名称
         */
        public function getTable($tbl_name)
        {
                return $this->getArray("DESCRIBE {$tbl_name}", $this->conn);
        }

        /**
         * 构造函数
         *
         * @param dbConfig  数据库配置
         */
        public function __construct($dbConfig)
        {
                if(file_exists($dbConfig['dsn'])){
                        $this->conn = new PDO($dbConfig['dsn'],$dbConfig['login'],$dbConfig['password']);
                }else{
                        spError("无法找到数据库,请确认数据库路径及名称正确!");
                }
                //$this->exec("SET NAMES UTF8");
        }

        /**
         * 对特殊字符进行过滤
         *
         * @param value  值
         */
        public function __val_escape($value) {
                if(is_null($value))return 'NULL';
                if(is_bool($value))return $value ? 1 : 0;
                if(is_int($value))return (int)$value;
                if(is_float($value))return (float)$value;
                if(@get_magic_quotes_gpc())$value = stripslashes($value);
               
                $toEscape = $this->conn->quote($toEscape);
                $toEscape = substr($toEscape, 1, -1);
                return $toEscape;
        }
}

2010-04-14 11:23:46

#5 homexigua

这是index.php配置
    'db' => array(        //pdo方式连接数据库
        'driver' => 'db_pdo',   // 驱动类型
                'login' => 'root',       // 用户名
                'password' => '',      // 密码
        'dsn' => 'mysql:host=localhost;dbname=db', //pdo方式连接数据库
                'prefix' => 'p_',           // 表前缀
     ),
     'db_driver_path' => '/db_pdo.php', // 数据库驱动文件

2010-04-14 11:24:25

#6 homexigua

model文件lib_news.php

class lib_news extends spModel{
        var $pk = 'id';
        var $table = 'news';
}
controller中main.php代码

class main extends spController{
        function index(){
                $db = spClass('lib_news');
                $list = $db->findAll();
                dump($list);
        }
}
提示无法找到数据库,请确认数据库路径及名称正确!

2010-04-14 11:26:04

#7 homexigua

初步解决,改成这个就可以啦
        
public function __construct($dbConfig)
        {
                try{
                        $this->conn = new PDO($dbConfig['dsn'],$dbConfig['login'],$dbConfig['password']);
                }catch(PDOException $exception){
                        echo "数据库链接错误:".$exception->getMessage();
                }
                $this->exec("SET NAMES UTF8");
        }

2010-04-14 11:36:34