为了账号安全,请及时绑定邮箱和手机立即绑定

调用未定义的方法mysqli_stmt :: get_result

调用未定义的方法mysqli_stmt :: get_result

慕尼黑5688855 2019-05-29 17:18:41
调用未定义的方法mysqli_stmt :: get_result这是我的代码:include 'conn.php';$conn = new Connection();$query = 'SELECT EmailVerified, Blocked FROM users WHERE Email = ? AND SLA = ? AND `Password` = ? ';$stmt = $conn->mysqli->prepare($query);$stmt->bind_param('sss', $_POST['EmailID'], $_POST['SLA'], $_POST['Password']);$stmt->execute(); $result = $stmt->get_result();我在最后一行得到错误:调用未定义的方法mysqli_stmt :: get_result()这是conn.php的代码:define('SERVER', 'localhost');define('USER', 'root');define('PASS', 'xxxx');define('DB', 'xxxx');class Connection{     /**      * @var Resource       */     var $mysqli = null;     function __construct(){         try{             if(!$this->mysqli){                 $this->mysqli = new MySQLi(SERVER, USER, PASS, DB);                 if(!$this->mysqli)                     throw new Exception('Could not create connection using MySQLi', 'NO_CONNECTION');             }         }         catch(Exception $ex){             echo "ERROR: ".$e->getMessage();         }     }}如果我写这行:if(!stmt) echo 'Statement prepared'; else echo 'Statement NOT prepared';它打印'Statement NOT prepared'。如果我直接在IDE中运行查询替换?用值标记,它工作正常。请注意,$ conn对象在项目中的其他查询中正常工作。请帮忙.......
查看完整描述

4 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

因此,如果MySQL本机驱动程序(mysqlnd)驱动程序不可用,因此使用bind_result和fetch而不是get_result,代码将变为:


include 'conn.php';

$conn = new Connection();

$query = 'SELECT EmailVerified, Blocked FROM users WHERE Email = ? AND SLA = ? AND `Password` = ?';

$stmt = $conn->mysqli->prepare($query);

$stmt->bind_param('sss', $_POST['EmailID'], $_POST['SLA'], $_POST['Password']);

$stmt->execute();

$stmt->bind_result($EmailVerified, $Blocked);

while ($stmt->fetch())

{

   /* Use $EmailVerified and $Blocked */

}

$stmt->close();

$conn->mysqli->close();


查看完整回答
反对 回复 2019-05-29
?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

你的系统缺少mysqlnd驱动程序!

如果您能够在(基于Debian / Ubuntu的)服务器上安装新软件包,请安装驱动程序:

sudo apt-get install php5-mysqlnd

然后重新启动您的Web服务器:

sudo /etc/init.d/apache2 restart


查看完整回答
反对 回复 2019-05-29
?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

对于那些搜索$ result = stmt-> get_result()的替代方法的人我已经创建了这个函数,它允许你模仿$ result-> fetch_assoc()但直接使用stmt对象:

function fetchAssocStatement($stmt){
    if($stmt->num_rows>0)
    {
        $result = array();
        $md = $stmt->result_metadata();
        $params = array();
        while($field = $md->fetch_field()) {
            $params[] = &$result[$field->name];
        }
        call_user_func_array(array($stmt, 'bind_result'), $params);
        if($stmt->fetch())
            return $result;
    }

    return null;}

正如你所看到它创建一个数组并使用行数据获取它,因为它在内部使用$ stmt-> fetch(),你可以像调用mysqli_result :: fetch_assoc一样调用它(只需确保$ stmt对象)打开并存储结果):

//mysqliConnection is your mysqli connection objectif($stmt = $mysqli_connection->prepare($query)){
    $stmt->execute();
    $stmt->store_result();

    while($assoc_array = fetchAssocStatement($stmt))
    {
        //do your magic
    }

    $stmt->close();}

希望这可以帮助。


查看完整回答
反对 回复 2019-05-29
  • 4 回答
  • 0 关注
  • 927 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信