Flex 4.5 PHP类MySQL搜索问题


Flex 4.5 PHP Class For MySQL Search Issue

我有一个简单的MySQL 5数据库,由

  • id - Int -主键
  • userID - int
  • 投影- int
  • 注释- varchar (120)

和一个简单的Flex 4.5应用程序,我需要搜索userID表中属于某个userID的所有行,并将其返回给Flex应用程序。我使用默认的ZendAMF进行远程操作。目前我的类看起来像:

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;
    }

但是,它不起作用。当我在Flash Builder 4.5中测试它时不返回任何对象,即使我知道条目在db.

我做错了什么?

编辑注:这是一个Adobe Air移动应用程序…

编辑

我在同一个文件中添加了一个PHP类,这个类也可以完美地工作。以下是完整的文件:

<?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);
        }       
    }
}
?>

第一个函数工作得很好。返回所有行。第二个,没有行…

另外,这里是我的请求和响应从Flash Builder 4.5(可能或可能没有一些使用):

要求:

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

反应:

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

对不起,如果这已经解决了,但这是因为你提供($userID)的函数,但绑定不同的变量?(itemID美元)

getAllBookmarksByUser (userId美元)

mysqli_stmt_bind_param(支撑美元,‘我’,itemID)

首先使用print_r()检查返回语句,如下所示

print_r($rows);
如果

打印行,则可能存在连接问题然后需要使用Firebug while检查请求响应Flex调用该服务。检查请求响应很简单,它在Firebug的标签net->All下。

检查您得到的响应并相应地纠正错误