php - mysqlnd 缺少驱动程序的解决方法

标签 php mysql

我的托管服务提供商的 PHP 5.3 没有安装 mysqlnd,因此当我调用 mysqli_stmt_get_result() 时它返回错误

是否有任何解决方法可以在不安装 mysqlnd 的情况下实现相同的功能?

我不想更改 100 个函数,如果有更简单的方法,我们将不胜感激 :)

最佳答案

我在 mysqlnd 不可用的服务器上遇到了很多麻烦,并且很头疼。

如果您没有安装/加载任何 mysqlnd,您将在尝试调用 mysqli_stmt_get_result() 时得到一个 undefined reference 。

我自己编写了 mysqli_stmt_get_result() 和一个 mysqli_result_fetch_array() 来配合它。

<?php
class iimysqli_result
{
    public $stmt, $nCols;
}    

function iimysqli_stmt_get_result($stmt)
{
    /**    EXPLANATION:
     * We are creating a fake "result" structure to enable us to have
     * source-level equivalent syntax to a query executed via
     * mysqli_query().
     *
     *    $stmt = mysqli_prepare($conn, "");
     *    mysqli_bind_param($stmt, "types", ...);
     *
     *    $param1 = 0;
     *    $param2 = 'foo';
     *    $param3 = 'bar';
     *    mysqli_execute($stmt);
     *    $result _mysqli_stmt_get_result($stmt);
     *        [ $arr = _mysqli_result_fetch_array($result);
     *            || $assoc = _mysqli_result_fetch_assoc($result); ]
     *    mysqli_stmt_close($stmt);
     *    mysqli_close($conn);
     *
     * At the source level, there is no difference between this and mysqlnd.
     **/
    $metadata = mysqli_stmt_result_metadata($stmt);
    $ret = new iimysqli_result;
    if (!$ret) return NULL;

    $ret->nCols = mysqli_num_fields($metadata);
    $ret->stmt = $stmt;

    mysqli_free_result($metadata);
    return $ret;
}

function iimysqli_result_fetch_array(&$result)
{
    $ret = array();
    $code = "return mysqli_stmt_bind_result(\$result->stmt ";

    for ($i=0; $i<$result->nCols; $i++)
    {
        $ret[$i] = NULL;
        $code .= ", \$ret['" .$i ."']";
    };

    $code .= ");";
    if (!eval($code)) { return NULL; };

    // This should advance the "$stmt" cursor.
    if (!mysqli_stmt_fetch($result->stmt)) { return NULL; };

    // Return the array we built.
    return $ret;
}
?>

关于php - mysqlnd 缺少驱动程序的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31562359/

相关文章:

php - 条目当前ID

mysql varbinary 与 varchar

php - Laravel 4.2 查询错误 - 当其他无缓冲查询处于事件状态时无法执行查询

mysql - 我需要在 "where"中添加一些条件,具体取决于变量字段值

javascript - 将查询结果导出到json文件

php - mysql相关领域

javascript - 如何将当前HTML+PHP页面代码存储为字符串并用其生成PDF文件

php - 从 API 检索信息

MySQL:代表第三列将两列相乘得到列的总和

PHP 从 MySQL 查询返回结果