slingit.org/system/db/result/ResultMysqliPrepare.php
2015-04-01 20:52:52 +02:00

58 lines
1.8 KiB
PHP

<?php
namespace SYSTEM\DB;
class ResultMysqliPrepare extends \SYSTEM\DB\Result{
private $res = NULL;
private $meta = NULL;
private $binds = array();
private $connection = NULL;
//Result from mysql_query
public function __construct($res,$connection){
$this->res = $res;
$this->connection = $connection;
$this->meta = \mysqli_stmt_result_metadata($this->res);
if(!$this->meta){
//occurs on insert
//throw new \Exception("Could not retrieve meta for prepare statement");}
return;}
while ($field = $this->meta->fetch_field() ) {
$this->binds[$field->table.'.'.$field->name] = &$this->binds[$field->table.'.'.$field->name];} //fix for ambiguous fieldnames
\mysqli_free_result($this->meta);
call_user_func_array(array($this->res, 'bind_result'), $this->binds); //you need 2 append the parameters - thats the right way to do that.
}
public function __destruct() {
$this->close();}
public function close(){
mysqli_stmt_free_result($this->res);
mysqli_stmt_close($this->res);
}
public function count(){
return \mysqli_stmt_num_rows($this->res);}
public function affectedRows(){
return \mysqli_stmt_affected_rows($this->res);}
//$object not used
//$result_type not used!
public function next($object = false, $result_type = MYSQL_BOTH){
if(\mysqli_stmt_fetch($this->res)){
foreach( $this->binds as $key=>$value ){
$row[substr($key, strpos($key, '.')+1)] = $value;} //fix for ambiguous fieldnames
return $row;}
return NULL;
}
public function seek($row_number){
return \mysqli_stmt_data_seek($this->res,$row_number);}
}