说实话,今天的数据库这章不是很满意,感觉讲的还不是很具体,有时间我还要单独看下数据库。还有两块字符流和异常的处理写的还行,不过异常处理以前有看过一点。
数据库
- 这里建议直接使用 PDO 了,而且不要过多的写某些其他数据库特有的特性,这样如果以后从这个数据库变更到其他数据库时可能要改很多代码。
- 还有就是数据库的配置文件单独放一块,不要和核心代码放在一起,要不然上传仓库或者被别人攻击的时候很容易将密码泄漏出去。
- 千万!千万!不要忘了将字符集设置为 UTF-8 ,要不然会出现乱码和很多不兼容问题。
- 要进行 SQL 语句的预处理,防止 SQL 注入。这里用预处理防 SQL 注入的原理是 PDO 会先将预处理语句解析成 SQL 模板,然后再接受你的值,这时候如果你的值里有 SQL 语句了也没用了,因为语句已经解析出来了,你已经改不了了,只能填值。
简单配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <?php require(dirname(__FILE__).'/../settings.php');
$pdo = new PDO( sprintf( 'mysql:host=%s;dbname=%s;port=%s;charset=%s', $settings['host'], $settings['name'], $settings['port'], $settings['charset'] ), $settings['username'], $settings['password'] ); ?>
|
下面是预处理语句
1 2 3 4 5 6 7 8 9
| <?php $sql = 'SELECT email FROM users WHERE id = :id'; $statement = $pdo->prepare($sql);
$userId = 1; $statement->bindValue(':id', $userId ,PDO::PARAM_INT); $statement->execute(); ?>
|
循环输出值
1 2 3 4 5 6
| <?php while (($result = $statement->fetch(PDO::FETCH_ASSOC)) !== false) { echo $result['email']; } var_dump($pdo); ?>
|
字符流处理
1 2 3 4 5 6 7 8
| <?php $handle = fopen(dirname(__FILE__).'\text.txt', 'rb');
while (feof($handle) !== true) { echo fgets($handle); } fclose($handle); ?>
|
简单的写了个例子,大致是 file_get_contents()
,fopen()
,fgets()
,fwrite()
这些函数的使用。
异常处理
可以自己 new 一些异常,debug
的时候可以定位的更精确一点,也容易解决一些问题
1 2 3 4 5
| <?php $exception = new Exception('Danger, Robinson!', 100); echo $exception->getCode(); echo $exception->getMessage(); ?>
|
多使用 try-catch
语句块捕获异常,以及出现异常后的处理方法
1 2 3 4 5 6 7 8 9 10 11
| <?php try { $pdo = new PDO('mysql://host=wronghost;dbname=wrong_name'); } catch (Exception $e) { echo $e->getCode(); echo PHP_EOL; echo $e->getMessage(); }finally { echo PHP_EOL."alwayys"; } ?>
|
那个 filp/whoops
组件真不错,laravel5.5
好像也要用这个了。
最后
明天开始看最后一大块内容,大概需要四天左右,是关于部署,开发和测试的内容。