get(); if ($conn === false) { ZMBuf::$sql_pool->put(null); throw new DbException("无法连接SQL!" . $line); } $result = $conn->query($line) === false ? false : true; ZMBuf::$sql_pool->put($conn); return $result; } catch (DBException $e) { Console::warning($e->getMessage()); throw $e; } } /** * @param string $line * @param array $params * @param int $fetch_mode * @return mixed * @throws DbException */ public static function rawQuery(string $line, $params = [], $fetch_mode = ZM_DEFAULT_FETCH_MODE) { Console::debug("MySQL: ".$line." | ". implode(", ", $params)); try { $conn = ZMBuf::$sql_pool->get(); if ($conn === false) { ZMBuf::$sql_pool->put(null); throw new DbException("无法连接SQL!" . $line); } $ps = $conn->prepare($line); if ($ps === false) { ZMBuf::$sql_pool->put(null); throw new DbException("SQL语句查询错误," . $line . ",错误信息:" . $conn->error); } else { if (!($ps instanceof PDOStatement) && !($ps instanceof PDOStatementProxy)) { var_dump($ps); ZMBuf::$sql_pool->put(null); throw new DbException("语句查询错误!返回的不是 PDOStatement" . $line); } if ($params == []) $result = $ps->execute(); elseif (!is_array($params)) { $result = $ps->execute([$params]); } else $result = $ps->execute($params); if ($result !== true) { ZMBuf::$sql_pool->put(null); throw new DBException("语句[$line]错误!" . $ps->errorInfo()[2]); //echo json_encode(debug_backtrace(), 128 | 256); } ZMBuf::$sql_pool->put($conn); return $ps->fetchAll($fetch_mode); } } catch (DbException $e) { if(mb_strpos($e->getMessage(), "has gone away") !== false) { zm_sleep(0.2); Console::warning("Gone away of MySQL! retrying!"); return self::rawQuery($line, $params); } Console::warning($e->getMessage()); throw $e; } catch (PDOException $e) { if(mb_strpos($e->getMessage(), "has gone away") !== false) { zm_sleep(0.2); Console::warning("Gone away of MySQL! retrying!"); return self::rawQuery($line, $params); } Console::warning($e->getMessage()); throw new DbException($e->getMessage(), $e->getCode(), $e); } } public static function isTableExists($table) { return in_array($table, self::$table_list); } }