首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >mysqlnd缺少驱动程序的解决方法

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

Stack Overflow用户
提问于 2015-07-22 19:54:10
回答 3查看 361关注 0票数 1

我的主机提供商安装了PHP5.3而没有安装mysqlnd,因此当我调用mysqli_stmt_get_result()时,它会返回一个错误

有什么变通方法可以在不安装mysqlnd的情况下实现相同的功能吗?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-07-22 19:56:19

我在mysqlnd不可用的服务器上经历了很多麻烦,并且有很多令人头疼的事情。

如果您没有安装/加载mysqlnd,那么当您尝试调用mysqli_stmt_get_result()时,您将得到一个未定义的引用。

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

代码语言:javascript
复制
<?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;
}
?>
票数 1
EN

Stack Overflow用户

发布于 2018-04-03 03:52:30

这个相关的问题有另一个解决方法,可以在不安装mysqlnd的情况下获取数据。它将数据放入关联数组中。

Mysqli - Bind results to an Array

票数 0
EN

Stack Overflow用户

发布于 2018-05-12 08:25:10

来自Daan的解决方案非常好!为此,我要说声谢谢!

重点是,基于此,我开发了一个类,当mysqlnd存在时,它可以与mysqlnd一起工作,当mysqlnd不存在时,我可以使用Daan的alternative。

我内置了fetchAssoc,fetchAllAssoc/数组,num_rows作为方法。它还在开发中,是youphptube的一部分。这可能也有助于Ehab (对fetchAssoc的渴望)。

https://github.com/DanielnetoDotCom/YouPHPTube/blob/master/objects/mysql_dal.php

用法:

代码语言:javascript
复制
    $sql = "SELECT * FROM users WHERE id = ?";
    $res = sqlDAL::readSql($sql,"i",array($users_id)); 
    $fullData = sqlDAL::fetchAllAssoc($res);
    // $data = sqlDAL::fetchAssoc($res); $data2 = sqlDAL::fetchAssoc($res); // or like this
    // $countedRows = sqlDAL::num_rows($res); // or like this
    sqlDAL::close($res);

我想把这个作为Daan回答的子帖子,但是我的名声太小了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31562359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档