自定义PHP的Mysql多参数绑定执行

来源:互联网 发布:linux mv覆盖目录非空 编辑:程序博客网 时间:2024/06/05 07:22

在PHP中使用Mysql的时候觉得sql中有参数需要绑定的时候觉得比较麻烦,于是自己上网看资料做成了一个多参数传入绑定的方法,暂时可以使用了,后面会继续针对这个机制进行修缮。这个查询的时候回绑定数据库里面的字段名,查询出来的时候会是键值对的形式,作为一个后台服务,查询数据做成JSON的时候是比较好用的。

/** * 执行SQL语句 * * @param 数据库连接 $dbLink             * @param SQL语句 $sql             * @param SQL语句绑定参数 $bindParams *            array("参数类型","绑定参数"...) * @return 执行结果 */function _runSql ($dbLink, $sql, $bindParams = null){    // SQL语句预处理    if ($stmt = mysqli_prepare($dbLink, $sql)) {        // 有限定参数        if ($bindParams) {            $bindParamsMethod = new ReflectionMethod("mysqli_stmt", "bind_param");            $bindParamsReferences = array();            // 限定参数类型            $typeDefinitionString = array_shift($bindParams);            foreach ($bindParams as $key => $value) {                $bindParamsReferences[$key] = &$bindParams[$key];            }            array_unshift($bindParamsReferences, $typeDefinitionString);            $bindParamsMethod->invokeArgs($stmt, $bindParamsReferences);        }        if (mysqli_stmt_execute($stmt)) {            $resultMetaData = mysqli_stmt_result_metadata($stmt);            if ($resultMetaData) {                $stmtRow = array();                $rowReferences = array();                while ($field = mysqli_fetch_field($resultMetaData)) {                    $rowReferences[] = &$stmtRow[$field->name];                }                mysqli_free_result($resultMetaData);                $bindResultMethod = new ReflectionMethod("mysqli_stmt",                         "bind_result");                $bindResultMethod->invokeArgs($stmt, $rowReferences);                $result = array();                while (mysqli_stmt_fetch($stmt)) {                    foreach ($stmtRow as $key => $value) {                        $row[$key] = $value;                    }                    $result[] = $row;                }                mysqli_stmt_free_result($stmt);            } else {                $result = mysqli_stmt_affected_rows($stmt);            }            mysqli_stmt_close($stmt);        } else {            $result = FALSE;        }    } else {        $result = FALSE;    }    return $result;}

0 0
原创粉丝点击