簡體   English   中英

從PHP中的准備好的語句打印整個SQL結果

[英]Printing an entire SQL result from a prepared statement in PHP

我正在嘗試構建一個函數,該函數允許我抽象代碼中mysqli函數的使用。 目前,我有一個使用標准SQL的工作版本(沒有准備好的語句)。

function mySqlQueryToArray($con, $sql){
    // Process SQL query
    $result = mysqli_query($con, $sql);

    if(mysqli_error($con)){
        out($sql . "\n");
        exit("ERROR: MySQL Error: " . mysqli_error($con));
    }

    // Put result  into 2D array
    $output = array();
    while($row = mysqli_fetch_assoc($result)) {
        array_push($output, $row);
    }

    return $output;
}

現在,我試圖將代碼轉換為可以使用預處理語句的代碼,但是我的研究表明,使用預處理語句時,您需要使用mysqli_stmt::bind_result將每一列綁定到不同的變量,這會導致問題,因為功能是為任意SQL查詢工作。

我的主要問題是:是否有一種方法可以將SQL查詢的整個輸出以2D數組的形式打印出來,就像上面的函數使用預處理語句一樣?

這是我當前使用准備好的語句的代碼,除了bind_result之外,所有內容都包含在內。

//Creates a MySQL Query, gets the result and then returns a 2D array with the results of the query
function mySqlQueryToArray($con, $sql, $params){
    // Prepare SQL query
    $stmt = $con->prepare($sql);

    if(mysqli_error($con)){
        echo "$sql=>\n" . print_r($params, true) . "\n";
        exit("$sql=>\n" . print_r($params, true) . "\nERROR: MySQL Error: " . mysqli_error($con));
    }

    // Bind parameters
    foreach($params as $param){
        $type = "s";
        if(gettype($param) == 'integer'){
            $type = "i";
        }
        $stmt->bind_param($type, $param);
    }

    //execute query
    $stmt->execute();

    // Put result  into 2D array
    $output = array();
    // ??? need to bind results and get them into an array somehow

    //close prepared statement
    $stmt->close();

    return $output;
}

事實證明,PDO是答案。 我覺得應該發布為解決問題而創建的代碼。 感謝@ Don'tPanic的提示。

function pdoQuery($sql, $params){
    $db = new PDO('mysql:host=localhost;dbname=My_Database;charset=utf8', 'username', 'password', array(PDO::ATTR_EMULATE_PREPARES => false, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
    try {
        $stmt = $db->prepare($sql);
        $stmt->execute($params);
        $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
        return $rows;
    }catch(PDOException $ex){
        echo "ERROR: SQL Error: $sql";
        // logError("ERROR: SQL Error: $sql");
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM