当前位置: 首页>>代码示例>>PHP>>正文


PHP mysqli::store_result方法代码示例

本文整理汇总了PHP中mysqli::store_result方法的典型用法代码示例。如果您正苦于以下问题:PHP mysqli::store_result方法的具体用法?PHP mysqli::store_result怎么用?PHP mysqli::store_result使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在mysqli的用法示例。


在下文中一共展示了mysqli::store_result方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: executeMulti

 public function executeMulti($sql)
 {
     if (!$this->connection) {
         $this->open();
     }
     $ret = $this->connection->multi_query($sql);
     if (!$ret) {
         $errMsg = "Can't Execute Query:" . $sql;
         $errMsg .= "\n MySQL Message:" . $this->connection->error;
         throw new \RuntimeException($errMsg);
     }
     do {
         if ($this->connection->errno) {
             $errMsg = "Can't Execute Query:" . $sql;
             $errMsg .= "\n MySQL Message:" . $this->connection->error;
             throw new \RuntimeException($errMsg);
         }
         if ($result = $this->connection->store_result()) {
             $result->free_result();
         }
         if (!$this->connection->more_results()) {
             break;
         }
     } while ($this->connection->next_result());
     return $ret;
 }
开发者ID:aainc,项目名称:Scruit,代码行数:26,代码来源:Session.php

示例2: buffer

 /**
  * Force buffering
  *
  * @throws Exception\RuntimeException
  */
 public function buffer()
 {
     if ($this->resource instanceof \mysqli_stmt && $this->isBuffered !== true) {
         if ($this->position > 0) {
             throw new Exception\RuntimeException('Cannot buffer a result set that has started iteration.');
         }
         $this->resource->store_result();
         $this->isBuffered = true;
     }
 }
开发者ID:CHRISTOPHERVANDOMME,项目名称:zf2complet,代码行数:15,代码来源:Result.php

示例3: multi_query_result

 /**
  * @desc Get only multi query result
  *
  * @access public
  * @return mixed
  */
 public function multi_query_result()
 {
     $data = array();
     do {
         if ($this->result = $this->link->store_result()) {
             $data[] = $this->result->fetch_all($this->fetchMode);
             $this->result->free();
         }
     } while ($this->link->more_results() && $this->link->next_result());
     return $data;
 }
开发者ID:emrahsifoglu,项目名称:simple-news-portal,代码行数:17,代码来源:MySQLiDriver.php

示例4: getSQLResultSet

function getSQLResultSet($commando)
{
    $mysqli = new mysqli("localhost", "root", "12345", "conexionandroid");
    $mysqli->query("SET NAMES 'utf8'");
    if ($mysqli->connect_error) {
        printf("Connect failed: %s\n", $mysqli->connect_error);
        exit;
    }
    if ($mysqli->multi_query($commando)) {
        return $mysqli->store_result();
    }
    $mysqli->close();
}
开发者ID:KellyA1D5J,项目名称:Otros,代码行数:13,代码来源:functions.php

示例5: execute_query

function execute_query($mysqli, $query)
{
    $bcloseconnection = false;
    // did we get passed a valid connection (i.e. did the calling function already make the connection to the db for us?)
    if (!isset($mysqli)) {
        //echo '<br>execute_query: opening db connection';
        $bcloseconnection = true;
        // Connect to the database
        $mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
        // check connection
        if (mysqli_connect_errno()) {
            log_error(sprintf("sql_execute: Connect failed: %s\n", mysqli_connect_error()));
            return false;
        }
    }
    //echo '<br>query='.$query;
    // execute the query
    if ($mysqli->multi_query($query)) {
        // Setup an incrementing count of the result set;
        $result_set_id = 0;
        do {
            if ($result = $mysqli->store_result()) {
                $ary_results[$result_set_id] = $result;
                // Increment the result set
                $result_set_id++;
            }
        } while ($mysqli->more_results() && $mysqli->next_result());
        // need to check if we got any resultsets back into the array...if not, the query was probably still valid so return TRUE
        if (!is_array($ary_results)) {
            return true;
        }
    } else {
        echo $mysqli->error;
        //log_error(sprintf("sql_execute: the query '%s' failed to execute due to the following error: '%s'", $query, $mysqli->error));
        return false;
    }
    // if we had to open the connection, then close it
    if ($bcloseconnection) {
        //echo '<br>execute_query: closing db connection';
        $mysqli->close();
    }
    return $ary_results;
}
开发者ID:YonasBerhe,项目名称:LS,代码行数:43,代码来源:utils.inc.php

示例6: getFetchArrays

 /**
  * Get all array data
  *
  * @return array
  */
 public function getFetchArrays()
 {
     $data = array();
     if ($this->resource instanceof \mysqli_result) {
         $result = $this->resource;
     } else {
         if ($this->resource instanceof \mysqli_stmt) {
             $result = $this->resource->get_result();
         } else {
             if ($this->resource instanceof \mysqli) {
                 $result = $this->resource->store_result();
             }
         }
     }
     while ($row = $result->fetch_array(\MYSQLI_ASSOC)) {
         $data[] = $row;
     }
     return $data;
 }
开发者ID:musicsnap,项目名称:Yaf.Global.Library,代码行数:24,代码来源:Result.php

示例7: queryMulti

 /**
  * Executes multiple queries given in one string within a single request.
  *
  * @param  string $sql The string with the multiple queries.
  * @return boolean false if the first statement failed. Otherwise true.
  */
 public function queryMulti($sql)
 {
     $result = false;
     $sql = $this->getSqlWithPrefix($sql);
     /*
      * Executing the multiple queries.
      */
     if ($this->conn->multi_query($sql)) {
         while ($this->conn->more_results()) {
             /*
              * If more results are available from the multi_query call we go
              * to the next result and free its memory usage.
              */
             $this->conn->next_result();
             $result = $this->conn->store_result();
             if ($result) {
                 $result->free();
             }
         }
     }
     return $result;
 }
开发者ID:prepare4battle,项目名称:Ilch-2.0,代码行数:28,代码来源:Mysql.php

示例8: list

 $res->priv_level = $_SESSION['priv_level'];
 $query = "SELECT user_name FROM summaries WHERE net_id='{$net_id}'; ";
 $result = $mysqli->query($query);
 list($user) = $result->fetch_row();
 if (empty($user)) {
     $course_id = $_SESSION['canvas_course_id'];
     $query = "INSERT INTO summaries (net_id, user_name, course_id) VALUES\n        ('{$net_id}','{$res->full_name}', '{$course_id}'); ";
     $mysqli->query($query);
 }
 $query = "SELECT * FROM profiles WHERE net_id='{$net_id}' ORDER BY full_name; ";
 $query .= "SELECT * FROM connections WHERE net_id='{$net_id}' ORDER BY profile_id1, profile_id2; ";
 $query .= "SELECT p.net_id, s.user_name, COUNT(*) AS network_size, SUM(same_school) AS agg_school,\n            SUM(is_faculty) AS agg_faculty, SUM(same_industry) as agg_industry, SUM(more_senior) as agg_senior,\n            SUM(same_level) as agg_level, SUM(more_junior) as agg_junior, SUM(same_gender) AS agg_gender,\n            SUM(same_nationality) AS agg_nationality,\n            SUM(same_ethnicity) AS agg_ethnicity, SUM(tech_skill) AS agg_tech,\n            SUM(finance_skill) AS agg_finance, SUM(ops_skill) AS agg_ops,\n            SUM(sales_skill) AS agg_sales, SUM(prod_skill) AS agg_prod,\n            SUM(gm_skill) AS agg_gm, SUM(vc_skill) AS agg_vc, SUM(other_skill) AS agg_other,\n            SUM(same_skill) AS agg_skill,\n            (SELECT COUNT(*) FROM connections c WHERE c.net_id=p.net_id) AS num_connections\n        FROM profiles p\n        INNER JOIN summaries s\n            ON s.net_id=p.net_id\n        GROUP BY net_id; ";
 $mysqli->multi_query($query);
 if ($mysqli->more_results()) {
     $mysqli->next_result();
     $result = $mysqli->store_result();
     $json = array();
     while ($row = $result->fetch_assoc()) {
         $json[] = $row;
     }
     $res->profiles = $json;
 }
 if ($mysqli->more_results()) {
     $mysqli->next_result();
     $result = $mysqli->store_result();
     $json = array();
     while ($row = $result->fetch_assoc()) {
         $json[] = $row;
     }
     $res->connections = $json;
 }
开发者ID:ChrisHuston,项目名称:Network-Analyzer,代码行数:31,代码来源:lti_login.php

示例9: mysqli

    function StoredProcedureArray2($query="") {
        //Me conecto a la base de datos

        $mysqli = new mysqli("atc-nh-natsdb.nationalnet.com", "staffcenter", "XgwofvLY2ayLf", "staffcenter");

        /* check connection */
        if (mysqli_connect_errno()) {
            printf("<br />Failed to connect to the database: %s\n", mysqli_connect_error());
            exit();
        }

        //LLama al stored procedure
        if ($mysqli->multi_query($query)) {
            /* guarda el resultado del stored procedure */
            $result = $mysqli->store_result();
            $mysqli->kill($mysqli->thread_id);
            $mysqli->close();
            return $result;
        }
    }
开发者ID:rommelxcastro,项目名称:CRI-Online-Sales---Admin,代码行数:20,代码来源:conexion.php

示例10: AS

CREATE TEMPORARY TABLE IF NOT EXISTS _cibh_maxnodecount ENGINE=MEMORY AS (
        SELECT
                BlockHeight,
                MAX(CountNode) MaxCountNode
        FROM
                _cibh_nodecount
        GROUP BY
                BlockHeight
        );
SELECT NC.BlockHeight BlockHeight, BlockMNPayee, BlockMNRatio FROM _cibh_maxnodecount MNC, _cibh_nodecount NC WHERE MNC.BlockHeight = NC.BlockHeight AND MNC.MaxCountNode = NC.CountNode;
EOT;
$sql = sprintf($sql, $blockfrom, $blockto, $testnet);
xecho("Executing query....\n");
//echo $sql."\n";
$blockhist = array();
if ($mysqli->multi_query($sql) && $mysqli->more_results() && $mysqli->next_result() && $mysqli->more_results() && $mysqli->next_result() && $mysqli->more_results() && $mysqli->next_result() && $mysqli->more_results() && $mysqli->next_result() && ($result = $mysqli->store_result())) {
    $update = array();
    while ($row = $result->fetch_assoc()) {
        $update[] = sprintf("(%d,%d,'%s',%.9f)", $testnet, intval($row['BlockHeight']), $row['BlockMNPayee'], floatval($row['BlockMNRatio']));
    }
    xecho("  Done (" . count($update) . " computed)\n");
    $sql = "INSERT INTO cmd_info_blocks (BlockTestnet, BlockId, BlockMNPayeeExpected, BlockMNValueRatioExpected) VALUES " . implode(",", $update) . " ON DUPLICATE KEY UPDATE BlockMNPayeeExpected = VALUES(BlockMNPayeeExpected), BlockMNValueRatioExpected = VALUES(BlockMNValueRatioExpected)";
    //  echo $sql."\n";
    xecho("Updating expected values in block database:\n");
    if ($result = $mysqli->query($sql)) {
        xecho("  Done (" . $mysqli->info . ")\n");
    } else {
        xecho("  Error (" . $mysqli->errno . ': ' . $mysqli->error . ")\n");
    }
} else {
    xecho(" Failed (" . $mysqli->errno . ": " . $mysqli->error . ")\n");
开发者ID:carriercomm,项目名称:dashninja-ctl,代码行数:31,代码来源:dmnblockcomputeexpected.script.inc.php

示例11: die

    $response["message"] = "Song id not set.";
    die(json_encode($response));
}
$sql = new mysqli("localhost");
if (!$sql->select_db("droidbox")) {
    die("Unable to connect to database.");
}
$cmd = "CALL get_next_song_queue(" . $_POST["songID"] . ");";
$cmd .= "SELECT id,title,artist,file_path,length FROM song,queue \n\t\tWHERE id = songID and priority >= 0 ORDER BY request_type, priority DESC, time_requested LIMIT 1;";
if ($sql->multi_query($cmd)) {
    if (!$sql->next_result()) {
        $response["success"] = 1;
        $response["message"] = "No next result.";
        die(json_encode($response));
    }
    if (!($result = $sql->store_result())) {
        $response["success"] = 1;
        $response["message"] = "No result to store.";
        die(json_encode($response));
    }
    if (!($row = $result->fetch_row())) {
        $response["success"] = 1;
        $response["message"] = "Queue is empty.";
        die(json_encode($response));
    } else {
        $response["songID"] = $row[0];
        $response["title"] = $row[1];
        $response["artist"] = $row[2];
        $response["filepath"] = $row[3];
        $reponse["length"] = $row[4];
        $result->free();
开发者ID:rolandoasmat,项目名称:DroidBox,代码行数:31,代码来源:getNextSongQueue.php

示例12: rev

 /**
  * 撤销订单
  * @param $type 彩种
  * @param $pid 方案编号
  */
 public function rev($type = 'dlt', $pid = null)
 {
     if (intval($pid) * 1 < 1) {
         remind::set("方案编号 为空不可操作!", '/lottnum/order/index/' . $type . '/?' . http_build_query($_GET), 'error');
     }
     $this->loaddb();
     $gcancelflag = true;
     $prow = self::$pdb->query("select uid,nums,rgnum,baodi,baodimoney,restat,onemoney from plans_lotty_orders where id='" . $pid . "'")->result_array(FALSE);
     if ($prow[0]['restat'] == 1) {
         remind::set("已做过撤单处理,不可重复撤单!", '/lottnum/order/index/' . $type . '/?' . http_build_query($_GET), 'error');
     }
     $grows = self::$pdb->query("select id,restat from sale_prousers where pid='" . $pid . "'")->result_array(FALSE);
     /*
      * 循环调用存储过程出现Commands out of sync; you can't run this command now 
      * 暂时用mysqli的原生方法来做
      */
     $config = Kohana::config('database.default');
     extract($config['connection']);
     $mysqli = new mysqli($host, $user, $pass, $database, $port);
     if (mysqli_connect_errno()) {
         remind::set("数据库异常!", '/lottnum/order/index/' . $type . '/?' . http_build_query($_GET), 'error');
     }
     if (is_array($grows)) {
         foreach ($grows as $row) {
             if ($row['restat'] == 0) {
                 if ($mysqli->multi_query("call rev_order(" . $row['id'] . ", -- 根单编号 \n\t\t\t                                    1, -- 撤单类型 1 方案撤单 2 跟单人撤销\n\t\t\t\t\t\t\t                    2011, -- 交易流水号\n\t\t\t                                   @stat)")) {
                     do {
                         if ($result = $mysqli->store_result()) {
                             while ($row = $result->fetch_row()) {
                                 if ($row[0] != 'succ') {
                                     $gcancelflag = false;
                                 }
                             }
                             $result->close();
                         }
                     } while ($mysqli->next_result());
                 } else {
                     $gcancelflag = false;
                 }
             }
         }
     }
     //操作方案表及清保
     if ($prow[0]['baodi'] == 1) {
         if ($mysqli->multi_query("call clearbaodi(" . $pid . ", -- 方案编号\n                         0, -- 清保类型 0 只清保 1 清保加认购\n                         @stat)")) {
             do {
                 if ($result = $mysqli->store_result()) {
                     while ($row = $result->fetch_row()) {
                         if ($row[0] == -1) {
                             $gcancelflag = false;
                         }
                     }
                     $result->close();
                 }
             } while ($mysqli->next_result());
         } else {
             $gcancelflag = false;
         }
     }
     if ($gcancelflag) {
         $crow = self::$pdb->query("update plans_lotty_orders set restat=1 where id='" . $pid . "'");
         remind::set("撤单成功!", '/lottnum/order/index/' . $type . '/?' . http_build_query($_GET), 'success');
     } else {
         //$result = array('stat'=>108,'info'=>'撤单失败!');
         remind::set("撤单失败!", '/lottnum/order/index/' . $type . '/?' . http_build_query($_GET), 'error');
     }
 }
开发者ID:RenzcPHP,项目名称:3dproduct,代码行数:72,代码来源:order.php

示例13: mysqli

/* 
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
header('Content-Type:application/json');
$OK = true;
$db = new mysqli("localhost", "root", "", "Bank");
if ($db->connect_error) {
    $ok = false;
}
$fil = file_get_contents('../DAL/Bank.sql');
$res = $db->multi_query($fil);
if ($res) {
    do {
        if ($result = $db->store_result()) {
            if ($result == false) {
                $OK = false;
            }
            $result->free();
        }
        $db->more_results();
    } while ($db->next_result());
} else {
    $OK = false;
}
$db->close();
if ($OK) {
    echo json_encode("OK");
} else {
    echo json_encode("Feil");
开发者ID:Jagjitcsingh,项目名称:TestBankApplication,代码行数:31,代码来源:initDB.php

示例14: handler

 /**
  * Executes HANDLER query.
  *
  * @param int $returnType Indicates what type of data should be produced from the result set. <br>
  * The possible values are the constants:<br>
  * <var>ASSOCIATIVE</var>, <var>NUMERIC</var>, <var>ASSOC_NUM</var>, <var>OBJECT</var> or <var>STRING</var>.
  *
  * @param string $table Table Name to perform SQL query on.
  *
  * @param string|array $targetColumn Target column in <var>$table</var> to get data from.<br>
  * The possible types are:<br>
  * <b>string</b>: Executes a query on a single column.<br>
  * <b>array</b>: Executes a query on multiple columns within the passed array.
  *
  * @param string $scope [optional] <br> Scope of the query. <br>
  * The possible values are the constants: <br>
  * <var>ALL</var> Retrieve all records found limited by <var>$limit</var>.<br>
  * <var>FIRST</var> Retrieve first record(s) in <var>$table</var> limited by <var>$limit</var>.<br>
  * <var>LAST</var> Retrieve the last record(s) in <var>$table</var> based on <var>$index</var>, and limited by <var>$limit</var>.
  *
  * @param int $limit [optional] <br> Limits the result set to <var>$limit</var> <br> with default value 1.
  *
  * @param string $index [optional] <br> Required only if <var>$scope</var> = <var>LAST</var>.
  *
  * @param string|array $whereColumn [optional] <br>Adds a <b>WHERE</b> statement to the query, in association with <var>$whereValue</var>.<br>
  * The possible types are:<br>
  * <b>string</b>: Single column name.<br>
  * <b>array</b>: Multiple column names within the passed array.
  *
  * @param string|array $whereValue [optional]<br> Requires <var>$whereColumn</var> existence.
  * The possible types are:<br>
  * <b>string</b>: Single column value.<br>
  * <b>array</b>: Multiple column values within the passed array.
  *
  * @param string|array $relationalOperator [optional]<br>
  * Required if <b>WHERE</b> statement exists.<br>
  * The possible values are the constants:<br>
  * <var>R_EQUAL</var>, <var>R_LESS</var>, <var>R_GREATER</var>, <var>R_LESS_EQUAL</var> or <var>R_GREATER_EQUAL</var>.<br>
  * <b>string</b>: Specifies the use of a unified operator between each <var>$whereColumn</var> and <var>$whereValue</var>.<br>
  * <b>array</b>: Multiple operators to use in the order passed.
  *
  * @param string|array $logicalOperator [optional]<br>
  * Required if multiple column <b>WHERE</b> statement exists.<br>
  * The possible values for this parameter are the constants:<br>
  * <var>BW_OR</var>, <var>BW_AND</var> or <var>BW_XOR</var><br>
  * <b>string</b>: Specifies the use of a unified operator between each pair of <var>$whereColumn</var> and <var>$whereValue</var>.<br>
  * <b>array</b>: Multiple operators to use in the passed order.
  *
  * @param string $extras [optional]<br>
  * Add extra MySQL statement(s) to the query.
  *
  * @return array Returns an array if <var>$returnType</var> is <var>ASSOCIATIVE</var>, <var>NUMERIC</var> or <var>ASSOC_NUM</var>.<br><br>
  *
  * @return array Returns a two dimensional array if the result set has more than 1 record.<br><br>
  *
  * @return array Returns an object if <var>$returnType</var> is <var>OBJECT</var>
  * where the attributes of the object represent the names of the fields found within the result set.<br><br>
  *
  * @return string Returns a string if <var>$returnType</var> is <var>STRING</var>.<br><br>
  *
  * @return NULL Returns <b>NULL</b> if the results set is empty.<br><br>
  *
  * @return boolean Returns <b>FALSE</b> and triggers <var>mysqli_error</var> on failure.
  *
  * @link http://dev.mysql.com/doc/refman/5.6/en/handler.html
  */
 public function handler($returnType, $table, $targetColumn, $scope, $limit = 1, $index = NULL, $whereColumn = NULL, $whereValue = NULL, $relationalOperator = "", $logicalOperator = "")
 {
     if (!isset($table) || !isset($targetColumn) || !isset($scope) || !isset($returnType)) {
         throw new ErrorException("(200) Empty argument/s supplied.");
     }
     if ($returnType > self::STRING || $returnType < self::ASSOCIATIVE) {
         throw new ErrorException("(201) Supplied \$returnType {$returnType} Not Found.");
     }
     if ($scope != self::ALL && $scope != self::FIRST && $scope != self::LAST) {
         throw new ErrorException("(202) Supplied \$scope {$scope} Not Found.");
     }
     if (isset($index) && $scope != self::LAST) {
         throw new ErrorException("(203) Cannot perform a HANDLER query with \$scope of MySQLiQuery::FIRST or MySQLiQuery::ALL with defined \$index.");
     }
     if ($scope === self::LAST && !isset($index)) {
         throw new ErrorException("(204) \$index is required for \$scope = MySQLiQuery::LAST.");
     }
     $whereString = $this->setWhereString($whereColumn, $whereValue, $relationalOperator, $logicalOperator, 205);
     $queryString = "HANDLER " . $table . " OPEN;";
     $queryString .= "HANDLER " . $table . " READ " . ($scope === self::LAST ? $index . " " . self::LAST : self::FIRST) . $whereString . " LIMIT " . $limit . ";";
     $queryString .= "HANDLER " . $table . " CLOSE;";
     parent::multi_query($queryString);
     parent::next_result();
     $this->query = parent::store_result();
     if ($this->query) {
         $rowsNumber = $this->query->num_rows;
         if ($rowsNumber == 0) {
             return NULL;
         }
         $queryResult = $targetColumn === "*" ? $this->setReturnObject($returnType) : $this->setCustomReturnObject($returnType, $targetColumn);
         $this->query->free();
         parent::next_result();
         return $this->singularReturn || $returnType === self::STRING ? $rowsNumber > 1 && $returnType != self::STRING ? $queryResult : $queryResult[0] : $queryResult;
     } else {
//.........这里部分代码省略.........
开发者ID:camelcasetechsd,项目名称:training-careers,代码行数:101,代码来源:MySQLiQuery.php

示例15: getLastUpdateSQL

 private function getLastUpdateSQL()
 {
     global $conf;
     $mysqli = new mysqli($conf["db_host"], $conf["db_user"], $conf["db_pass"], $conf["db_name"], $conf["db_port"]);
     $this->pageStart = 0;
     $this->perPage = 1;
     $proc = "CALL PLSearch('{$this->searchTerm}', '{$this->statusString}', '{$this->genderString}', '{$this->ageString}', '{$this->hospitalString}', '{$this->incident}', '{$this->sortBy}', {$this->pageStart}, {$this->perPage})";
     $res = $mysqli->multi_query("{$proc}; SELECT @allCount;");
     $this->lastUpdated = '0001-01-01 01:01:01';
     if ($res) {
         $results = 0;
         $c = 0;
         do {
             if ($result = $mysqli->store_result()) {
                 if ($c == 0) {
                     while ($row = $result->fetch_assoc()) {
                         $this->lastUpdated = $row["updated"];
                     }
                 }
                 $result->close();
                 if ($mysqli->more_results()) {
                     $c += 1;
                 }
             }
         } while ($mysqli->more_results() && $mysqli->next_result());
     }
     $mysqli->close();
     $date = new DateTime($this->lastUpdated);
     $this->lastUpdated = $date->format('Y-m-d H:i:s');
 }
开发者ID:bobrock,项目名称:vesuvius,代码行数:30,代码来源:SearchDB.php


注:本文中的mysqli::store_result方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。