Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP中从准备好的语句打印整个SQL结果_Php_Mysqli_Prepared Statement - Fatal编程技术网

在PHP中从准备好的语句打印整个SQL结果

在PHP中从准备好的语句打印整个SQL结果,php,mysqli,prepared-statement,Php,Mysqli,Prepared Statement,我正在尝试构建一个函数,它允许我在代码中抽象mysqli函数的使用。目前我有一个使用标准SQL的工作版本(没有准备好的语句) 现在我正试图将代码转换成可以使用预处理语句的东西,但我的研究表明,当使用预处理语句时,需要使用mysqli\u stmt::bind\u result将每一列绑定到不同的变量,这会导致问题,因为函数的作用点是用于任意SQL查询 我的主要问题是:是否有一种方法可以在2D数组中打印SQL查询的整个输出,与上面使用预处理语句的函数相同 这是我当前使用预处理语句的代码,其中除了b

我正在尝试构建一个函数,它允许我在代码中抽象mysqli函数的使用。目前我有一个使用标准SQL的工作版本(没有准备好的语句)

现在我正试图将代码转换成可以使用预处理语句的东西,但我的研究表明,当使用预处理语句时,需要使用
mysqli\u stmt::bind\u result
将每一列绑定到不同的变量,这会导致问题,因为函数的作用点是用于任意SQL查询

我的主要问题是:是否有一种方法可以在2D数组中打印SQL查询的整个输出,与上面使用预处理语句的函数相同

这是我当前使用预处理语句的代码,其中除了bind_结果之外,其他都有

//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");
    }
}

用mysqliI获取实际查询是不可能的。我想,对于这类事情,使用PDO比使用mysqli容易得多。在处理准备好的陈述时,你会有更多的灵活性。
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");
    }
}