When retrieving table rows with PHP and prepared statements, you must use a method called bindresult() and pass in a variable name for each column that is being returned from the database. For example, if you are selecting three columns (say, id, title, body), bindresult must be passed three variables names: bind_result($id, $title, $body). This becomes a pain in the butt when, for example, if it is within a class file, where you will not always know how many columns are being selected from the table. This code gets around that.
class Database { private $mysql; function __construct($host, $username, $password, $db) { $this->mysql = new mysqli($host, $username, $password, $db) or die('There was a problem connecting to the database'); } /** * Simple query method. Pass in your SQL query as a parameter, and it'll do the rest * and return an array of the returned rows * * @param string $query Should be equal to a SQL query for querying the database. * @return array Returns an array of the returned rows from the db. */ public function query($query) { $stmt = $this->mysql->prepare($query); $stmt->execute(); $meta = $stmt->result_metadata(); while( $field = $meta->fetch_field() ) { $parameters[] = &$row[$field->name]; } while($stmt->fetch()) { foreach($row as $key => $val ) { // This next line isn't necessary for your project. // It can be removed. I use it to ensure // that the "excerpt" of the post doesn't end in the middle // of a word. if ( $key === 'excerpt') $val = $this->cleanExcerpt($row[$key]); $x[$key] = $val; } $results[] = $x; } return $results; } } $db = new Database('host', 'username' 'password', 'databaseName'); $items = $db->query("Your SQL query here");
Comments
Subscribe to comments
You need to login to post a comment.

Oh wow, nevermind. Mine is much more convoluted. Essentially, while($fetch); you concatenate each field into a large String Value, explode that into an array, and combine each array into a larger array based on record. This snippet is now a favorite of mine, and I'm going to replace my code before the next release.
Oh wow, nevermind. Mine is much more convoluted. Essentially, while($fetch); you concatenate each field into a large String Value, explode that into an array, and combine each array into a larger array based on record. This snippet is now a favorite of mine, and I'm going to replace my code before the next release.
Sorry About the Double Post >.< (Now 3 Posts for the Price of 1!)