stmt get_result另一种方式

时间:2017-01-19 21:23:24

标签: php mysqli statements

我的一个查询示例......

public function db_query_select($query, $params, $param_types){
        $dbc = $this->dbConnect();
        if($stmt = $dbc->prepare($query)){
            //prepared.
            //move the types to the front of the param array
            array_unshift($params, $param_types);
            //call the bind param function with the parameters passed in by reference
            //bind_param only allows by reference.
          call_user_func_array(array($stmt, "bind_param"), $this->paramsToRefs($params));
                //binded.
                //attempt to execute the sql statement.
                if ($stmt->execute()){
                            $result = $stmt->get_result();
                            $stmt->close();
                            $dbc->close();
                            return $result;
                }
            }
            //must have failed...
            return NULL;
    }

如何更改stmt get_result();没有本机驱动程序的共享服务器/主机接受的东西... mysqlnd。

有人知道吗?而不会更改使用此数据库功能的所有函数。

感谢。

更新::::感谢@your常识,请参阅答案。

我相信这就是我追求的目标。希望它能帮助那些和我一样有同样问题的人。 PDO vs MySQLi,似乎更简单......没有用户调用func或类似的东西。

DB HANDLER:

private function dbConnect(){
        $config = parse_ini_file($_SERVER['DOCUMENT_ROOT'].'/NTConfig.ini');
        try {
        $dbc = new PDO('mysql:host='.$config['DB_HOST'].';dbname='.$config['DB_DATABASE'].'', $config['DB_USER'], $config['DB_PASSWORD']);
        $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch (PDOException $e) {
        echo 'Connection failed: ' . $e->getMessage();
        exit;
    }
        return $dbc;

    }


public function db_query_select($query, $params){
        $dbc = $this->dbConnect();
        if($stmt = $dbc->prepare($query)){
            //prepared.
                //attempt to execute the sql statement.
                if ($stmt->execute($params)){
                    $result = $stmt->fetch(PDO::FETCH_ASSOC);
                    print_r($result);
                    //$stmt->close();
                    //$dbc->close();
                    return $result;
                }
            }
            //must have failed...
            return NULL;
    }

在DBHANDLER之外

$query = "SELECT error_desc FROM nt_errors WHERE error_code = :ERROR_CODE LIMIT 1";
            //array: holds parameters for the query.
            $params = array(
            ':ERROR_CODE' => $code
            );
            $result = $db->db_query_select($query, $params);
            if ($result == NULL){
                $errorText = 'ERROR: Failed to retrieve error';
            }
            else{
                //var_dump($result);
                $errorText = $result['error_desc'];

1 个答案:

答案 0 :(得分:0)

PDO不仅比mysqli更加用户友好,而且也没有任何这种令人讨厌的缺点。所以我强烈建议使用PDO而不是mysqli。

使用DO,您之后的功能应该像这个一样简单

function run($sql, $args = NULL)
{
    $pdo = ...;//your means of getting the connection variable
    $stmt = $pdo->prepare($sql);
    $stmt->execute($args);
    return $stmt;
}

获得函数的结果后,你可以链接一个fetch方法到你的调用fetchColumn()。

鉴于你的代码主要是程序性的,我建议你写一篇非常simple PDO wrapper的代码。所以完整的代码将是:

$sql = "SELECT error_desc FROM nt_errors WHERE error_code = ?";
$errorText = DB::run($sql,[$code])->fetchColumn();
if (!$errorText){
    $errorText = 'ERROR: Failed to retrieve error';
}

这里DB类是dbConnect()函数的更好替代品,run()方法是db_query_select()的替代品,实际上可以用于任何查询类型,包括插入,更新或任何其他。