php - 使用面向对象的 mysqli 概念选择或更新单个值

标签 php mysql mysqli

我有这两种方法,用于在我的 users 表中设置标志。 我可以看到我的 setEmailSent 函数运行良好,但 isEmailSent 始终返回 0,即使其值设置为 1>.

class Mydatabase{
    function connect(){
        ini_set('display_errors', TRUE);
        ini_set('display_startup_errors', TRUE);
        ini_set("error_log","/log/php_error_log");
        error_reporting(E_ALL | E_STRICT);
        error_reporting('1');
        $connect_error = 'Sorry we are experiencing down time.';
        $host = "some.com";
        $username = "username"; 
        $password ='password';

        $db = "loginregister";
        $mysqli = new mysqli($host, $username, $password, $db) or die($connect_error);
        return $mysqli;
    }

}
    function isEmailSent($username){

        //**********************************************************************************
        // @Desc -  will check if email already sent to the user
        // @Parms - str username
        // @return - details int
        //**********************************************************************************

            //set up database connection
            $db = new Mydatabase();
            $mysqli = $db->connect();   

            //sql statement
            $sql = "SELECT `emailSent` FROM `users` WHERE `username` = ?";

            //sql prepare statement
            $stmt= $mysqli->prepare($sql);

            //bind sql params
            $stmt->bind_param('s', $username);

            //sql execute statement
            $stmt->execute();

            //store sql result
            $stmt->store_result();

            //bind sql result
            $stmt->bind_result($emailSent);
            return $emailSent;
    }


    function setEmailSent($userName){

        //**********************************************************************************
        // @Desc -  will set that email already sent to the user
        // @Parms - str username
        //**********************************************************************************

            //set up database connection
            $db = new Mydatabase();
            $mysqli = $db->connect();   

            $stmt = $mysqli->prepare("UPDATE `users` SET `emailSent`=? WHERE `username`=?");

            if ($stmt === false) {
              trigger_error($mysqli->error, E_USER_ERROR);
            }

            $stmt->bind_param('is', $emailSent,$userName);

            $emailSent = 1;

            $stmt->execute();
    }

谁能告诉我哪里错了???

最佳答案

您需要在bind_result之后获取数据为

$stmt->bind_result($emailSent);
$stmt->fetch();// fetch data
return $emailSent;// then return

阅读bind_result

关于php - 使用面向对象的 mysqli 概念选择或更新单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37652839/

相关文章:

php - 压缩字符串,然后解压缩字符串?

mysql - 在另一个函数中从 MySQL 函数添加两个输出的问题

php - Mysql准备语句LIKE问题

php - 使用 MySqli 向 MySql 记录插入 NULL 值

php - Docker Compose 和 Xdebug 在 PhpStorm 中不起作用

php - 预批准的嵌入式支付流程中的访客支付支持

MySQL 表名中的点

php - CodeIgniter 默认的数据库驱动是 mysql 而不是 mysqli

php - fatal error : Call to undefined function mysqli_connect() while extension are set properly

javascript - jQuery AJAX 在成功时将函数作为数据返回