98 lines
2.8 KiB
PHP
98 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace Api;
|
|
|
|
use Api\Parameter\Parameter;
|
|
use Api\Parameter\StringType;
|
|
|
|
class ExecuteStatement extends Request {
|
|
|
|
public function __construct($user, $externCall = false) {
|
|
parent::__construct($user, $externCall, array(
|
|
'query' => new StringType('query')
|
|
));
|
|
|
|
$this->isPublic = false;
|
|
$this->variableParamCount = true;
|
|
}
|
|
|
|
public function execute($aValues = array()) {
|
|
if(!parent::execute($aValues)) {
|
|
return false;
|
|
}
|
|
|
|
$this->success = false;
|
|
$this->result['rows'] = array();
|
|
|
|
if(count($this->params) == 1) {
|
|
$this->success = $this->user->getSQL()->execute($this->getParam('query'));
|
|
if(!$this->success) {
|
|
$this->lastError = $this->user->getSQL()->getLastError();
|
|
}
|
|
} else {
|
|
$aSqlParams = array('');
|
|
foreach($this->params as $param) {
|
|
if($param->name === 'query') continue;
|
|
|
|
$value = $param->value;
|
|
if(is_null($value)) {
|
|
$aSqlParams[0] .= 's';
|
|
} else {
|
|
switch($param->type) {
|
|
case Parameter::TYPE_BOOLEAN:
|
|
$value = $param->value ? 1 : 0;
|
|
$aSqlParams[0] .= 'i';
|
|
break;
|
|
case Parameter::TYPE_INT:
|
|
$aSqlParams[0] .= 'i';
|
|
break;
|
|
case Parameter::TYPE_FLOAT:
|
|
$aSqlParams[0] .= 'd';
|
|
break;
|
|
case Parameter::TYPE_DATE:
|
|
$value = $value->format('Y-m-d');
|
|
$aSqlParams[0] .= 's';
|
|
break;
|
|
case Parameter::TYPE_TIME:
|
|
$value = $value->format('H:i:s');
|
|
$aSqlParams[0] .= 's';
|
|
break;
|
|
case Parameter::TYPE_DATE_TIME:
|
|
$value = $value->format('Y-m-d H:i:s');
|
|
$aSqlParams[0] .= 's';
|
|
break;
|
|
case Parameter::TYPE_EMAIL:
|
|
default:
|
|
$aSqlParams[0] .= 's';
|
|
}
|
|
}
|
|
|
|
$aSqlParams[] = $value;
|
|
}
|
|
|
|
$tmp = array();
|
|
foreach($aSqlParams as $key => $value) $tmp[$key] = &$aSqlParams[$key];
|
|
if($stmt = $this->user->getSQL()->connection->prepare($this->getParam('query'))) {
|
|
if(call_user_func_array(array($stmt, "bind_param"), $tmp)) {
|
|
if($stmt->execute()) {
|
|
$this->result['rows'] = $stmt->affected_rows;
|
|
$this->success = true;
|
|
} else {
|
|
$this->lastError = 'Database Error: execute() failed with ' . $this->user->getSQL()->getLastError();
|
|
}
|
|
} else {
|
|
$this->lastError = 'Database Error: bind_param() failed with ' . $this->user->getSQL()->getLastError();
|
|
}
|
|
|
|
$stmt->close();
|
|
} else {
|
|
$this->lastError = 'Database Error: prepare() failed with ' . $this->user->getSQL()->getLastError();
|
|
}
|
|
}
|
|
|
|
return $this->success;
|
|
}
|
|
};
|
|
|
|
?>
|