Ejemplo n.º 1
0
 /**
  * @param	MysqliDriver (mysqli) $driver
  * @param	DbRequestInterface $request
  * @param	DbResponseInterface $response
  * @return	DbResponseInterface
  */
 public function execute(MysqliDriver $driver, DbRequestInterface $request, DbResponseInterface $response)
 {
     $mode = MYSQLI_STORE_RESULT;
     if (!$request->isResultBuffer()) {
         $mode = MYSQLI_USE_RESULT;
     }
     switch ($request->getResultType()) {
         /* column names as keys in the result */
         case 'name':
             $type = MYSQLI_ASSOC;
             break;
             /* column position as keys in the result */
         /* column position as keys in the result */
         case 'position':
             $type = MYSQLI_NUM;
             break;
         case 'name-pos':
             $type = MYSQLI_BOTH;
             break;
         default:
             $type = MYSQLI_ASSOC;
     }
     $sql = $request->getSql();
     $filter = $request->getCallback();
     try {
         $resultHandle = $driver->query($sql, $mode);
     } catch (\Exception $e) {
         $response->addError($e->getMessage(), $e->getCode());
         return $response;
     }
     if (!$resultHandle instanceof mysqli_result) {
         $class = get_class($this);
         $response->addError("{$class} expected mysqli_result none given");
         $text = "{$driver->error} {$driver->sqlstate}";
         $response->addError($text, $driver->errno);
         return $response;
     }
     $result = new QueryResult($resultHandle);
     $errorStack = $response->getErrorStack();
     $data = $result->fetchAllData($errorStack, $type, $filter);
     if (true === $data) {
         $data = null;
     }
     if (is_array($data)) {
         $response->setResultSet($data);
     }
     return $response;
 }
Ejemplo n.º 2
0
 /**
  * @param	DbRequestInterface $request
  * @return	DbReponseInterface
  */
 public function execute(MysqliDriver $driver, DbRequestInterface $request, DbResponseInterface $response)
 {
     $stmt = new PreparedStmt($driver->stmt_init());
     $stmt->prepare($request->getSql());
     if ($stmt->isError()) {
         $error = $stmt->getError();
         $response->addError($error['error-text'], $error['error-nbr']);
         return $response;
     }
     /* normalize and bind parameters */
     if ($request->isValues()) {
         $stmt->organizeParams($request->getValues());
         if ($stmt->isError()) {
             $error = $stmt->getError();
             $response->addError($error['error-text'], $error['error-nbr']);
             return $response;
         }
     }
     $stmt->execute();
     if ($stmt->isError()) {
         $error = $stmt->getError();
         $response->addError($error['error-text'], $error['error-nbr']);
         return $response;
     }
     $isOrganized = $stmt->organizeResults();
     if ($stmt->isError()) {
         $error = $stmt->getError();
         $response->addError($error['error-text'], $error['error-nbr']);
         return $response;
     }
     /* database executed the query successfully and 
      * no results are needed
      */
     if ($isOrganized && !$stmt->isResultset()) {
         return $response;
     }
     $stmt->storeResults();
     $errorStack = $response->getErrorStack();
     $data = $stmt->fetch($errorStack, $request->getCallback());
     if (is_array($data)) {
         $response->setResultSet($data);
     }
     return $response;
 }