请问 php 这样操作数据库稳(安全)吗?,并发不大,体验要求也不高,百来人(使用人数),如果行的话,我就要开始咯。
function db_conn($sql) {
$SqlConn = new PDO("mysql:host=localhost;dbname=test", "root", "ll1314");
$SqlConn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$IsQuery = $SqlConn->prepare(array_shift(($sql)));
$IsChange=$IsQuery->execute($sql);
$ArrayResult = $IsQuery->fetchAll();
return !empty($ArrayResult)?$ArrayResult:$IsChange;
}
$sql=Array("select * from isuser where uid=?","42");
//$sql=Array("INSERT INTO `test`.`isuser`(`user`, `passwd`, `nickname`) VALUES (?, ?, ?)","testUser","pass","iamverylovely");
var_dump(db_conn($sql));
//dbHelper
function db_conn($sql) {
$SqlConn = new PDO("mysql:host=localhost;dbname=test", "root", "ll1314");
$SqlConn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$IsQuery = $SqlConn->prepare(array_shift(($sql)));
for($i=0;$i<count($sql);$i++){
$IsQuery->bindValue($i+1,$sql[$i]);
}
$IsChange=$IsQuery->execute();
$ArrayResult = $IsQuery->fetchAll();
return !empty($ArrayResult)?$ArrayResult:$IsChange;
}
$sql=Array("select * from isuser where uid=:uid","43");
//$sql=Array("INSERT INTO `test`.`isuser`(`user`, `passwd`, `nickname`) VALUES (:user, :passwd, :nickname)","testUser","pass","iamverylovely");
var_dump(db_conn($sql));
改成了这样,应该没什么问题了吧
想了一下,我的应用场景用了单例模式意义也不大
db_conn() 这个方法每次请求接口只执行一次
不会出现下面的情况
db_conn()
db_conn()
...
谢谢大家的帮助拉~~~
1
iamverylovely OP 在线等摸鱼程序员出现。
|
2
iamverylovely OP 打开浏览器,关闭浏览器,刷新,刷新!
|
3
sanggao 2020-05-29 12:28:14 +08:00
可以 pdo 绑定可以有效防止注入
|
4
iamverylovely OP @sanggao 好的,我去试试。。
|
5
nyfwan123 2020-05-29 12:59:20 +08:00
return 容易暴露异常,建议优化。
|
6
iamverylovely OP @nyfwan123 error_reporting(0) 可以忽略掉那些异常吗
|
7
nyfwan123 2020-05-29 13:05:25 +08:00
@iamverylovely 可以忽略 但是与你预期的返回值不符了 最好函数里捕获异常 再 return
|
8
nyfwan123 2020-05-29 13:08:51 +08:00
@iamverylovely 或者参考#3 所说 你去看一下官方文档有 pdo 的示例 或者直接引用诸如 medoo 的第三方库。
|
9
iamverylovely OP @nyfwan123 好的,谢谢。
|
10
icyluna 2020-05-29 13:24:16 +08:00 via iPhone
推荐 medoo 真心好用
|
11
ccppgo 2020-05-29 13:55:35 +08:00
http://doc.workerman.net/components/workerman-mysql.html 这个类库封装的也不错, 10 楼推荐的 medoo 感觉 where 是真心别扭(对于习惯 ORM 的人来说)
|
12
DavidNineRoc 2020-05-29 13:56:30 +08:00
1. 把 pdo 封装成单例,不要每次查询一个新连接
2. 不要 fetchAll, 直接 fetch, 如果要全部才 fetchAll. 区分只拿一条和多条的区别.(或者你在 SQL 显式写 limit 1,很多人不喜欢写,但很重要.) |
13
yc8332 2020-05-29 14:09:50 +08:00
至少搞个单例吧。。不然操作 10 次数据库,建了 10 个实例
|
14
iamverylovely OP |