修正数据库查询一处问题 改进数据库异常避免暴露敏感信息

This commit is contained in:
thinkphp
2017-07-04 09:08:52 +08:00
parent 439ccdf418
commit 6e94f2eae7
3 changed files with 10 additions and 7 deletions

View File

@@ -380,11 +380,13 @@ abstract class Builder
if (array_key_exists($field, $binds)) { if (array_key_exists($field, $binds)) {
$bind = []; $bind = [];
$array = []; $array = [];
foreach ($value as $k => $v) { $i = 0;
if ($this->query->isBind($bindName . '_in_' . $k)) { foreach ($value as $v) {
$bindKey = $bindName . '_in_' . uniqid() . '_' . $k; $i++;
if ($this->query->isBind($bindName . '_in_' . $i)) {
$bindKey = $bindName . '_in_' . uniqid() . '_' . $i;
} else { } else {
$bindKey = $bindName . '_in_' . $k; $bindKey = $bindName . '_in_' . $i;
} }
$bind[$bindKey] = [$v, $bindType]; $bind[$bindKey] = [$v, $bindType];
$array[] = ':' . $bindKey; $array[] = ':' . $bindKey;

View File

@@ -2301,7 +2301,7 @@ class Query
$key = is_string($cache['key']) ? $cache['key'] : md5(serialize($options) . serialize($this->bind)); $key = is_string($cache['key']) ? $cache['key'] : md5(serialize($options) . serialize($this->bind));
$resultSet = Cache::get($key); $resultSet = Cache::get($key);
} }
if (!$resultSet) { if (false === $resultSet) {
// 生成查询SQL // 生成查询SQL
$sql = $this->builder->select($options); $sql = $this->builder->select($options);
// 获取参数绑定 // 获取参数绑定
@@ -2323,7 +2323,7 @@ class Query
} }
} }
if (isset($cache) && $resultSet) { if (isset($cache) && false !== $resultSet) {
// 缓存数据集 // 缓存数据集
$this->cacheData($key, $resultSet, $cache); $this->cacheData($key, $resultSet, $cache);
} }
@@ -2481,7 +2481,7 @@ class Query
$result = isset($resultSet[0]) ? $resultSet[0] : null; $result = isset($resultSet[0]) ? $resultSet[0] : null;
} }
if (isset($cache) && $result) { if (isset($cache) && false !== $result) {
// 缓存数据 // 缓存数据
$this->cacheData($key, $result, $cache); $this->cacheData($key, $result, $cache);
} }

View File

@@ -36,6 +36,7 @@ class DbException extends Exception
'Error SQL' => $sql, 'Error SQL' => $sql,
]); ]);
unset($config['username'], $config['password']);
$this->setData('Database Config', $config); $this->setData('Database Config', $config);
} }