用于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 = []

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)

First Check the return statement with print_r() like this

print_r($rows);

if it prints the rows then there might be connectivity problem then you need check the request response using the Firebug while flex calls the service. Its simple to check the request response, its under tab net->All in Firebug.

check the response you get and rectify the error accordingly