slim php $ stmt-> get_result()to $ stmt-> bind_result()

时间:2014-07-07 04:50:54

标签: php mysqli

我的问题是如何将get_result()转换为bind_result()

这是我的index.php //

$app->get('/tasks', 'authenticate', function() {
        global $user_id;
        $response = array();
        $db = new DbHandler();

        // fetching all user tasks
        $result = $db->getAllUserTasks($user_id);

        $response["error"] = false;
        $response["tasks"] = array();

        // looping through result and preparing tasks array
        while ($task = $result->fetch_assoc()) {
            $tmp = array();
            $tmp["id"] = $task["id"];
            $tmp["task"] = $task["task"];
            $tmp["status"] = $task["status"];
            $tmp["createdAt"] = $task["created_at"];
            array_push($response["tasks"], $tmp);
        }

        echoRespnse(200, $response);
    });

//

这是dbhandler.php

 public function getAllUserTasks($user_id) {
    $stmt = $this->conn->prepare("SELECT t.* FROM tasks t, user_tasks ut WHERE t.id = ut.task_id AND ut.user_id = ?");
    $stmt->bind_param("i", $user_id);
    $stmt->execute();
    $tasks = $stmt->get_result();
    $stmt->close();
    return $tasks;
}

我在尝试将其转换为使用bind_result()而不是get_result()时遇到各种麻烦,有些人可以给我一些建议吗

谢谢你提前

杰森

这是我的方法试图转换它没有运气请指出问题谢谢

的index.php ///

$app->get('/companies', 'authenticate', function() {
        global $user_id;
        $response = array();
        $db = new DbHandler();

        // fetching all user tasks
        $result = $db->getAllUserCompanies($user_id);

        $response["error"] = false;
        $response["companies"] = array();
        $companies = array();
        while ($companies = $result->fetch()) {
            $tmp = array();
            $tmp["CompanyID"] = $companies["CompanyID"];
            $tmp["UserID"] = $companies["UserID"];
            $tmp["CompanyName"] = $companies["CompanyName"];
            $tmp["CompanyAddress"] = $companies["CompanyAddress"];
            $tmp["CompanyCity"] = $companies["CompanyCity"];
            $tmp["CompanyIndustry"] = $companies["CompanyIndustry"];
            $tmp["CompanyContact"] = $companies["CompanyContact"];
            $tmp["CompanyNotes"] = $companies["CompanyNotes"];
            $tmp["CreatedDate"] = $companies["CreatedDate"];
            $tmp["UpdatedTime"] = $companies["UpdatedTime"];
            $tmp["UpdatedBy"] = $companies["UpdatedBy"];
            array_push($response["companies"], $tmp); 

        echoRespnse(200, $response); 
     }
    });

dbhealper.php //

public function getAllUserCompanies($user_id) {
        $stmt = $this->conn->prepare("SELECT CompanyID, UserID, CompanyName, CompanyAddress, CompanyCity, CompanyIndustry, CompanyContact, CompanyNotes, CreatedDate, UpdatedTime, UpdatedBy FROM company WHERE UserID = ?");
        $stmt->bind_param("i", $user_id);
        //if ($stmt->execute()) {
        ($stmt->execute());
        $companies = array();
        $companies = $stmt->bind_result($CompanyID, $UserID, $CompanyName, $CompanyAddress, $CompanyCity, $CompanyIndustry, $CompanyContact, $CompanyNotes, $CreatedDate, $UpdatedTime, $UpdatedBy);
        $stmt->close();
        return $companies;
}

3 个答案:

答案 0 :(得分:1)

dbhealper.php //

你可以试试这个

public function getAllUserCompanies($user_id) {
        $stmt = $this->conn->prepare("SELECT CompanyID, UserID, CompanyName, CompanyAddress, CompanyCity, CompanyIndustry, CompanyContact, CompanyNotes, CreatedDate, UpdatedTime, UpdatedBy FROM company WHERE UserID = ?");
        $stmt->bind_param("i", $user_id);
        $stmt->execute();
        /* Store the result (to get properties) */
        $stmt->store_result();

        /* Get the number of rows */
        $num_of_rows = $stmt->num_rows;

        /* Bind the result to variables */
        $companies = $stmt->bind_result($CompanyID, $UserID, $CompanyName, $CompanyAddress, $CompanyCity, $CompanyIndustry, $CompanyContact, $CompanyNotes, $CreatedDate, $UpdatedTime, $UpdatedBy);
    return $companies;
        /* free results */
        $stmt->free_result();
}

如果你看起来没有做太多改动,但是为了存储结果我在$stmt->execute(); $stmt->store_result();之后添加了一行

答案 1 :(得分:1)

如果您使用$ stmt-> get_result收到错误,可能是因为: 它仅适用于mysqlnd驱动程序(http://us2.php.net/manual/en/m ....使用此解决它: DbHandler.php

/**
 * Fetching all user tasks
 * @param String $user_id id of the user
 */
public function getAllUserTasks($user_id) {
    $stmt = $this->conn->prepare("SELECT t.* FROM tasks t, user_tasks ut WHERE t.id = ut.task_id AND ut.user_id = ?");
    $stmt->bind_param("i", $user_id);
    $stmt->execute();
    $stmt->bind_result($id, $task, $status, $created_at);
    $tasks = array();
    while($stmt->fetch()) {
        $tmp = array();
        $tmp["id"] = $id;
        $tmp["task"] = $task;
        $tmp["status"] = $status;
        $tmp["createdAt"] = $created_at;
        array_push($tasks, $tmp);
    }
    $stmt->close();
    return $tasks;
}

并在index.php中:

/**
 * Fetching all user tasks
 * @param String $user_id id of the user
 */
public function getAllUserTasks($user_id) {
    $stmt = $this->conn->prepare("SELECT t.* FROM tasks t, user_tasks ut WHERE t.id = ut.task_id AND ut.user_id = ?");
    $stmt->bind_param("i", $user_id);
    $stmt->execute();
    $stmt->bind_result($id, $task, $status, $created_at);
    $tasks = array();
    while($stmt->fetch()) {
        $tmp = array();
        $tmp["id"] = $id;
        $tmp["task"] = $task;
        $tmp["status"] = $status;
        $tmp["createdAt"] = $created_at;
        array_push($tasks, $tmp);
    }
    $stmt->close();
    return $tasks;
}

我猜测代码示例来自http://www.androidhive.info/2014/01/how-to-create-rest-api-for-android-app-using-php-slim-and-mysql-day-23/

答案 2 :(得分:0)

我建议不要在任何PHP代码中使用get_result(),因为它需要安装mysqlndlibmysql不支持,fetch()是用于连接的最常用的库用php的mysql。相反,bind_result()应该用于从结果集创建行数组,或者public function getAllUserTasks($user_id) { $tasks = []; $stmt = $this->conn->prepare("SELECT t.* FROM tasks t, user_tasks ut WHERE t.id = ut.task_id AND ut.user_id = ?"); $stmt->bind_param("i", $user_id); $stmt->execute(); if($stmt->num_rows > 0) { while($row = $stmt->fetch()) { $tasks[] = $row; } $stmt->close(); } return $tasks; } 用于仅返回1行的情况。

$app->get('/companies', 'authenticate', function() {
    global $user_id;
    $db = new DbHandler();

    // fetching all user tasks
    $response = $db->getAllUserCompanies($user_id);
    if(!empty($response))
    {
        echoRespnse(200, $response);
    }else{
        //handle your error
    }
});

修改

使用它index.php

{{1}}