donglaoe2979 2011-11-21 04:22
浏览 55
已采纳

用于MySQL搜索的Flex 4.5 PHP类问题

I have a simple MySQL 5 database that consists of

  • id - Int - Primary Key
  • userID - int
  • projectId - int
  • note - varchar (120)

And a simple Flex 4.5 app that I need to search the userID table for all rows belonging to a certain userID and return it to the Flex app. I'm using the default ZendAMF for my remoting. Currently my class looks like:

public function getAllBookmarksByUser($userId) {

        $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename WHERE userId=?");     
        $this->throwExceptionOnError();

        mysqli_stmt_bind_param($stmt, 'i', $itemID);        
        $this->throwExceptionOnError();

        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();

        $rows = array();

        mysqli_stmt_bind_result($stmt, $row->id, $row->userId, $row->projectID, $row->note);

        while (mysqli_stmt_fetch($stmt)) {
          $rows[] = $row;
          $row = new stdClass();
          mysqli_stmt_bind_result($stmt, $row->id, $row->userId, $row->projectID, $row->note);
        }

        mysqli_stmt_free_result($stmt);
        mysqli_close($this->connection);

        return $rows;
    }

But, it's not working. Not returning any objects when I test it in Flash Builder 4.5 even though I know the entries are in the db.

What am I doing wrong?

Edit P.S. - This is an Adobe Air mobile app...

Edit

I'm adding a PHP class within the same file that is working perfectly as well. Here is the full file:

<?php

/**
 * Get 
 */
class BookmarksService {

    var $username = "*SQLUserName";
    var $password = "*SQLUserPassword*";
    var $server = "*MySQLServerURL*";
    var $port = "3306";
    var $databasename = "mscoast";
    var $tablename = "bookmarks";

    var $connection;

    /**
     * Connect
     */
    public function __construct() {
        $this->connection = mysqli_connect(
                                $this->server,  
                                $this->username,  
                                $this->password, 
                                $this->databasename,
                                $this->port
                            );

        $this->throwExceptionOnError($this->connection);
    }

    /**
     *Get All
     */
    public function getAllBookmarks() {

        $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename");        
        $this->throwExceptionOnError();

        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();

        $rows = array();

        mysqli_stmt_bind_result($stmt, $row->id, $row->userId, $row->projectID, $row->note);

        while (mysqli_stmt_fetch($stmt)) {
          $rows[] = $row;
          $row = new stdClass();
          mysqli_stmt_bind_result($stmt, $row->id, $row->userId, $row->projectID, $row->note);
        }

        mysqli_stmt_free_result($stmt);
        mysqli_close($this->connection);

        return $rows;
    }


    /**
     * Get All By User ID
     */

public function getAllBookmarksByUser($userId) {

        $stmt = mysqli_prepare($this->connection, "SELECT * FROM $this->tablename WHERE userId=?");      
        $this->throwExceptionOnError();

        mysqli_stmt_bind_param($stmt, 'i', $itemID);      
        $this->throwExceptionOnError();

        mysqli_stmt_execute($stmt);
        $this->throwExceptionOnError();

        $rows = array();

        mysqli_stmt_bind_result($stmt, $row->id, $row->userId, $row->projectID, $row->note);

        while (mysqli_stmt_fetch($stmt)) {
          $rows[] = $row;
          $row = new stdClass();
          mysqli_stmt_bind_result($stmt, $row->id, $row->userId, $row->projectID, $row->note);
        }

        mysqli_stmt_free_result($stmt);
        mysqli_close($this->connection);

        return $rows;
    }


    /**
     * Utility function to throw an exception if an error occurs 
     * while running a mysql command.
     */
    private function throwExceptionOnError($link = null) {
        if($link == null) {
            $link = $this->connection;
        }
        if(mysqli_error($link)) {
            $msg = mysqli_errno($link) . ": " . mysqli_error($link);
            throw new Exception('MySQL Error - '. $msg);
        }       
    }
}

?>

The first function works perfectly. Returns all of the rows. The second, gives no rows...

Also, here are my requests and responses from Flash Builder 4.5 (may or may not be of some use):

Request:

POST /app-resources/gateway.php HTTP/1.1
Referer: app:/Desktop.swf
Accept: text/xml, application/xml, application/xhtml+xml, text/html;q=0.9, text/plain;q=0.8, text/css, image/png, image/jpeg, image/gif;q=0.8, application/x-shockwave-flash, video/mp4;q=0.9, flv-application/octet-stream;q=0.8, video/x-flv;q=0.7, audio/mp4, application/futuresplash, */*;q=0.5
x-flash-version: 10,2,153,1
Content-Type: application/x-amf
Accept-Encoding: gzip,deflate
User-Agent: Mozilla/5.0 (Windows; U; en) AppleWebKit/531.9 (KHTML, like Gecko) AdobeAIR/2.6
Host: www.hidden.hmmmm
Content-Length: 268

Flex Message (flex.messaging.messages.RemotingMessage)     operation = getAllBookmarksByUser    clientId = null    destination = BookmarksService    messageId = A43315C8-6A13-4BAB-9F70-C78337A6AA5A    timestamp = 0    timeToLive = 0    body =     [      0    ]    hdr(DSId) = nil

Response:

HTTP/1.1 200 OK
Date: Mon, 21 Nov 2011 19:03:45 GMT
Server: Apache/2.2.17 (Ubuntu)
X-Powered-By: PHP/5.3.5-1ubuntu7.3
Cache-Control: no-cache, must-revalidate
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
Content-Length: 289
Content-Type: application/x-amf

Flex Message (flex.messaging.messages.AcknowledgeMessage)     clientId = 2FE53654-02C4-3548-136C-000066519473    correlationId = A43315C8-6A13-4BAB-9F70-C78337A6AA5A    destination = null    messageId = 5FCFFE5B-EBA5-2AE9-2A51-00005691367F    timestamp = 132190222500    timeToLive = 0    body = []
  • 写回答

2条回答 默认 最新

  • duanmibei1929 2012-03-05 16:53
    关注

    Sorry if this has been solved, but is this because you are providing ($userID) to the function but binding a different variable? ($itemID)

    getAllBookmarksByUser($userId)

    mysqli_stmt_bind_param($stmt, 'i', $itemID)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!