function listAction() { $config = getConfig(); $columnsName = []; foreach ($_GET['columns'] as $column) { if (!empty($column['data'])) { $columnsName[] = $column['data']; } } $order = $_GET['order'][0]; $orderColumn = $order['column']; $start = intval($_GET['start']); $sqlAssoc = ['table' => ['name' => 'item', 'dbname' => 'db_vktest', 'as' => 'i'], 'query' => ['select' => $columnsName, 'from' => 'item', 'order' => ['column' => $columnsName[$orderColumn], 'dir' => $order['dir']], 'start' => $start, 'length' => $_GET['length']]]; $mysqli = db_mysqli_connect($sqlAssoc['table']['dbname']); $rowStore = db_mysqli_query_fetch_store($mysqli, 'SELECT s.countitems FROM store AS s WHERE s.idstore = 1', MYSQLI_ASSOC)[0]; $sqlQueryes = buildListItemQuery($sqlAssoc, $rowStore['countitems']); $rows = db_mysqli_query_fetch_list($mysqli, $sqlQueryes, MYSQLI_ASSOC); db_mysqli_close($mysqli); // var_dump($_SESSION); // var_dump($sqlQueryes); $_SESSION['list'] = ['lastitem' => $rows[count($rows) - 1], 'firstitem' => $rows[0], 'lastpage' => $start, 'slowQueryType' => $sqlQueryes['slowQueryType']]; //for cahce before last result afterLictAction($sqlAssoc, $rowStore); $response = ['recordsTotal' => $rowStore['countitems'], 'recordsFiltered' => $rowStore['countitems'], 'data' => $rows, 'draw' => $_GET['draw'], 'start' => $_GET['start']]; echo json_encode($response); }
function createAction() { $config = getConfig(); $params = $config['memcache']; $table = ['name' => 'item', 'dbname' => 'db_vktest', 'as' => 'i']; $item = handleRequest($_POST); $mysqli = db_mysqli_connect($table['dbname']); $queryInsert = "INSERT INTO item (name,description,price,url) VALUES (" . "'" . mysqli_real_escape_string($mysqli, $item['name']) . "'," . "'" . mysqli_real_escape_string($mysqli, $item['description']) . "'," . $item['price'] . "," . "'" . mysqli_real_escape_string($mysqli, $item['url']) . "'" . ")"; $resultInsert = mysqli_query($mysqli, $queryInsert); $resultError = mysqli_error($mysqli); db_mysqli_close($mysqli); if (!$resultInsert) { addAlert('danger', 'Произошла ошибка записи:' . $resultError); $url = 'http://' . $_SERVER['HTTP_HOST'] . "/"; header('Location: ' . $url); exit; } //another proc $pid = pcntl_fork(); if ($pid == 0) { changeCountItemsById(1, 1); exit(0); } addAlert('success', 'Продукт добавлен'); $url = 'http://' . $_SERVER['HTTP_HOST'] . "/"; header('Location: ' . $url); }
function getItemsByIds($ids) { $table = ['name' => 'item', 'dbname' => 'db_vktest', 'as' => 'i']; $sqlQuery = "SELECT * FROM item WHERE iditem IN (" . implode(',', $ids) . ')'; $mysqli = db_mysqli_connect($table['dbname']); $result = mysqli_query($mysqli, $sqlQuery); $rows = []; while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { $rows[] = $row; } db_mysqli_close($mysqli); return $rows; }
function changeCountItemsById($id, $val) { $config = getConfig(); $params = $config['memcache']; $table = ['name' => 'item', 'dbname' => 'db_vktest', 'as' => 'i']; $mysqli = db_mysqli_connect($table['dbname']); $queryUpdate = 'UPDATE store SET countitems = countitems + ' . intval($val) . ' WHERE idstore = ' . intval($id); $resultUpdate = mysqli_query($mysqli, $queryUpdate); db_mysqli_close($mysqli); $memcache = memcache_connect($params['host'], $params['port']); memcache_flush($memcache); memcache_close($memcache); }
function afterLictAction($queryAssoc, $rowStore) { $config = getConfig(); /** * Count of items page,that need be cached,because * but last-1/-2/-3/-4 use slow query */ $COUNT_BEFORE_END = 5; $length = $queryAssoc['query']['length']; $itemsLast = $rowStore['countitems'] % $length; $lastPage = $rowStore['countitems'] - $itemsLast; $start = $queryAssoc['query']['start']; /** * only for last page */ if ($start == $lastPage) { //last 5 page in cache& $queryCheckPre = array_merge($queryAssoc, []); $queryCheckPre['query']['start'] = $start - 1 * $length; $queryPre = buildListItemQuery($queryCheckPre, $rowStore['countitems']); $params = $config['memcache']; $memcache = memcache_connect($params['host'], $params['port']); $memcacheQueryKey = 'QUERY' . $queryPre['slow']; $data = memcache_get($memcache, $memcacheQueryKey); memcache_close($memcache); //another proc if (empty($data)) { $pid = pcntl_fork(); if ($pid == 0) { $mysqli = db_mysqli_connect($queryAssoc['table']['dbname']); for ($i = 1; $i < $COUNT_BEFORE_END; $i++) { $queryAssoc['query']['start'] = $start - $i * $length; $sqlQueryes = buildListItemQuery($queryAssoc, $rowStore['countitems']); $rows = db_mysqli_query_fetch_list($mysqli, $sqlQueryes, MYSQLI_ASSOC); $_SESSION['list'] = ['lastitem' => $rows[count($rows) - 1], 'firstitem' => $rows[0], 'lastpage' => $queryAssoc['query']['start'], 'slowQueryType' => $sqlQueryes['slowQueryType']]; // usleep(500); } db_mysqli_close($mysqli); exit(0); //end new proc } } } }
function updateAction() { $config = getConfig(); $table = ['name' => 'item', 'dbname' => 'db_vktest', 'as' => 'i']; $item = handleRequest($_POST); $mysqli = db_mysqli_connect($table['dbname']); $queryUpdate = "UPDATE item SET " . "name='" . mysqli_real_escape_string($mysqli, $item['name']) . "'," . "description='" . mysqli_real_escape_string($mysqli, $item['description']) . "'," . "price=" . $item['price'] . "," . "url='" . mysqli_real_escape_string($mysqli, $item['url']) . "'" . " WHERE iditem=" . $item['iditem']; $resultUpdate = mysqli_query($mysqli, $queryUpdate); $resultError = mysqli_error($mysqli); db_mysqli_close($mysqli); if (!$resultUpdate) { addAlert('danger', 'Произошла ошибка записи:' . $resultError); $url = 'http://' . $_SERVER['HTTP_HOST'] . "/"; header('Location: ' . $url); exit; } addAlert('success', 'Продукт сохранен!'); $url = 'http://' . $_SERVER['HTTP_HOST'] . "/"; header('Location: ' . $url); }
function deleteItemsByIds($ids) { $table = ['name' => 'item', 'dbname' => 'db_vktest', 'as' => 'i']; $mysqli = db_mysqli_connect($table['dbname']); $sqlQuery = "DELETE FROM item WHERE iditem IN (" . implode(',', $ids) . ')'; $result = mysqli_query($mysqli, $sqlQuery); $_return = $result; if (($deleteRows = mysqli_affected_rows($mysqli)) <= 0) { $_return = false; } var_dump($_return); var_dump($sqlQuery); var_dump($deleteRows); db_mysqli_close($mysqli); if ($_return) { $pid = pcntl_fork(); if ($pid == 0) { changeCountItemsById(1, $deleteRows * -1); exit; } } return $_return; }