/** * 连接到MySQL * @access protected */ protected function connect() { $dsn = 'mysql:host=' . $this->connect_info['host'] . ';port=' . $this->connect_info['port'] . ';dbname=' . $this->connect_info['name'] . ';charset=' . strtolower(str_replace('-', '', Sy::$app['charset'])); try { $this->link = new PDO($dsn, $this->connect_info['user'], $this->connect_info['password']); $this->link->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE); $this->result = array(); } catch (PDOException $e) { throw new SYDBException(YHtml::encode($e->getMessage), 2, $dsn); } }
/** * 连接到MySQL * @access protected */ protected function connect() { //对老版本的支持 if ($this->connect_info['version'] === 'sqlite3') { $dsn = 'sqlite:'; } else { $dsn = 'sqlite2:'; } $path = str_replace('@app/', Sy::$appDir, $this->connect_info['path']); $dsn .= $path; try { $this->link = new PDO($dsn); $this->result = array(); } catch (PDOException $e) { throw new SYDBException(YHtml::encode($e->getMessage), $this->dbtype, $dsn); } }
/** * 执行查询 * @access public * @param string $key * @param string $sql SQL语句 * @param array $data 参数 */ public function query($key, $sql, $data = NULL) { $prepare_sql = $this->setQuery($sql); $st = $this->link->prepare($prepare_sql); if ($st === FALSE) { throw new SYDBException('Failed to prepare SQL', $this->dbtype, $sql); } if (is_array($data)) { foreach ($data as $k => $v) { $st->bindValue($k + 1, $v); } } try { $r = $st->execute(); if ($r === FALSE) { throw new SYDBException(YHtml::encode($st->errorInfo()), $this->dbtype, $sql); } } catch (PDOException $e) { throw new SYDBException(YHtml::encode($e->getMessage()), $this->dbtype, $sql); } $this->result[$key] = $st; }
'prefix' => 'pre_' ] ];</pre> </ol> </div> </div> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">Step2.编写Controller和模板</h3> </div> <div class="panel-body"> <ol> <li>在<code>myapp</code>下建立两个目录:<code>view、controllers</code></li> <li>在<code>controllers</code>下新建一个文件,取名为<code>home.php</code>,<strong>并加入到<code>config.php</code>的controller列表中去</strong>,修改文件,写入以下内容:</li> <pre><?php echo YHtml::encode('<?php'); ?> use \sy\base\Controller; use \sy\lib\YHtml; //注意:Controller类命名规则为:大写字母C+首字母大写的Controller名 //例如本例中,Controller名为home,则Controller类名为CHome class CHome extends Controller { public function __construct() { } //供公开调用的方法必须以action开头,action后连接<strong>首字母大写</strong>的方法名 public function actionHello() { //必须:发送Content-type的header,避免乱码和其他情况 Sy::setMimeType('html'); //加载模板,home/hello对应的是view/home/hello.php,以此类推 Sy::view('home/hello');
<?php use sy\lib\YHtml; ?> <!DOCTYPE html> <head> <title>Hello</title> <?php echo YHtml::meta(); ?> <?php echo YHtml::css('@root/public/css/bootstrap.min.css'); ?> </head> <body> <div class="container"> <h1>基本构架</h1> <div class="panel panel-default"> <div class="panel-heading"> <h3 class="panel-title">框架目录和文件</h3> </div> <div class="panel-body"> <ul> <li>index.php 入口文件,在其中设置应用设置所在目录即可</li> <li>framework 框架目录<ul> <li>sy.php 入口文件</li> <li>BaseSY.php 基本类</li> <li>base<ul> <li>Controller.php Controller基本类,应用的Controller都继承此类</li> <li>SYException.php 异常类</li> <li>SYDBException.php 数据库异常类</li>
/** * 执行查询 * @access public * @param string $key * @param string $sql SQL语句 * @param array $data 参数 */ public function query($key, $sql, $data = NULL) { $sql = $this->setQuery($sql); if (is_array($data)) { foreach ($data as $v) { $v = str_replace("'", "\\'", $v); $sql = str_replace('?', "'{$v}'", $sql, 1); } } $r = $this->link->query($sql); //执行失败 if ($r !== TRUE) { throw new SYDBException(YHtml::encode($this->link->error), $this->dbtype, YHtml::encode($sql)); } $this->result[$key] = $r; }
/** * Set * @access public */ public function set($a) { $this->val = $a; return 'Set to ' . YHtml::encode($a); }
public function foo($str) { return YHtml::encode(YHtml::css($str)); }