Mysql SELECT FOUND_ROWS () возвращает 1 в MySQL

volnistii11

Новичок
Чтобы не было в запросе SELECT FOUND_ROWS() выводит 1.
Код:
SELECT SQL_CALC_FOUND_ROWS id, name, description, create_date FROM my_table ORDER BY id asc LIMIT
0,25;
SELECT FOUND_ROWS();
Уже просто в phpmyadmin пишу две команды вместе, все равно выводит 1, хотя в этот же момент первая команда выводит целую таблицу данных.
Если пишу эти же две команды но через MySQL менеджер HeidiSQL, все выводит корректно (сначала таблицу, потом то, что в ней 4 записи).
В принципе мне на phpmyadmin все равно. Проблема в том, что в php скрипте тоже выводит неверно, а именно - единицу.
В php делаю через mysqli_query.
Версия mysql-5.5.
Версия php- 5.5.
Использую openserver.
 

volnistii11

Новичок
Потому что гладиолус. PMA не даст тебе того, что ты хочешь.

Как ты написал скрипт - не знаю, но сам механизм на версии mysql 5.5 рабочий.

Советую использовать count(*)
Вот, как написан скрипт:
PHP:
    function resultValue($my_select)
    {
        global $conn;
    //    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $result = mysqli_query($conn,$my_select);
       
        return mysqli_fetch_assoc($result);
    }

    $data = resultValue($q);
    $total = resultValue("SELECT FOUND_ROWS()");
    echo json_encode(["draw"=>intval($_POST['draw']), "recordsTotal"=>(int) $total, "recordsFiltered"=>(int) $total, "data"=>$data])
В функцию передается сгенерированный запрос (один из примеров приведен в шапке вопроса)
 

volnistii11

Новичок
А, щас решил добавить кучу выводов, FOUND_ROWS() все верно выводит, где-то в другом месте проблема, прошу прощения
 

WMix

герр M:)ller
Партнер клуба
mysqli_fetch_assoc - вернет array
print_r(resultValue("SELECT FOUND_ROWS()") );
 

Фанат

oncle terrible
Команда форума
про подготовленные запросы слышал когда-нибудь?
 

volnistii11

Новичок
про подготовленные запросы слышал когда-нибудь?
Так я и подготавливаю запрос, вот полный код:
PHP:
    <?php
    $servername = "localhost";
    $database = "my_in";
    $username = "Admin";
    $password = "8Admin702";
    $conn = mysqli_connect($servername, $username, $password, $database);
       
       
   

    function resultValue($my_select)
    {
        global $conn;
    //    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
        $result = mysqli_query($conn,$my_select);
       

       
        return mysqli_fetch_assoc($result);
    }
   
    function mres($value)
    {
        $search = array("\\",  "\x00", "\n",  "\r",  "'",  '"', "\x1a");
        $replace = array("\\\\","\\0","\\n", "\\r", "\'", '\"', "\\Z");

        return str_replace($search, $replace, $value);
    }


    $pre = " ";
    $select = "SELECT SQL_CALC_FOUND_ROWS id, name, description, create_date FROM my_table ";
    $where  = "";
    $search = "";
    if( sizeof($_POST['columns']) > 0 ) {
        $searchPre = $pre."(";
        foreach($_POST['columns'] as $column){
            if($column['searchable'] == true && $_POST['search']['value'] != -1 && !empty($_POST['search']['value']) ){
                 $search .= $searchPre. $column['name']." LIKE '%".mres($_POST['search']['value'])."%'";
                 $searchPre = " OR ";
            }
        }
        $pre = " AND ";
        if (strlen($search)>0) { $search .= ")"; $where = ' WHERE '; }
    }
    if( isset($_POST['order'][0]) ){
        $col_name = $_POST['columns'][$_POST['order'][0]['column']]['name'];
        $limit_and_order .= ' ORDER BY '.$col_name.' '.$_POST['order'][0]['dir'];
    }
    $limit = filter_input(INPUT_POST,'length', FILTER_VALIDATE_INT );
    if($limit != -1){
        $start = filter_input(INPUT_POST, 'start', FILTER_VALIDATE_INT);
        $limit_and_order .= " LIMIT ".$start.",".$limit;
    }
    $q = $select.$where.$search.$limit_and_order;
    $data = resultValue($q);
    $total = resultValue("SELECT FOUND_ROWS()");
    echo json_encode(["draw"=>intval($_POST['draw']), "recordsTotal"=>(int) $total, "recordsFiltered"=>(int) $total, "data"=>$data]);

    ?>
Вот только что-то не получается корректно вернуть значения=(
 
Последнее редактирование модератором:
Сверху