I have a simple MySQL 5 database that consists of
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