Как получить граф или количество строк в результате набора в PHP с использованием ODBC-соединения?

Пока я создаю веб-страницу в моем веб-приложении Мое приложение, My Connection работает нормально, но когда я хочу получить количество строк оператора SELECT, которое я использовал в моем запросе, он дает мне -1! хотя мой результирующий набор имеет около 10 строк.

Я хотел бы получить фактическое количество строк набора результатов. Я искал руководство PHP и документацию, но я не нашел прямого способа, как функция Count или что-то в этом роде.

Я задаюсь вопросом, нужно ли мне сделать заявление SQL (*) SQL в другом запросе и прикрепить его к моему соединению, чтобы получить количество строк?

Кто-нибудь знает простой и прямой способ получить это?

функция odbc_num_rows всегда дает -1 в результате, поэтому я не могу получить фактическое количество строк.

Мое программирование langauge – это PHP, а My Database Engine – Sybase, а способ подключения к базе данных – ODBC.

Вот код, который я использовал: –

<?PHP //PHP Code to connect to a certain database using ODBC and getting information from it //Determining The Database Connection Parameters $database = 'DatabaseName'; $username = 'UserName'; $password = 'Password'; //Opening the Connection $conn = odbc_connect($database,$username,$password); //Checking The Connection if (!$conn) { exit("Connection Failed: " . $conn); } //Preparing The Query $sql = "SELECT * FROM Table1 WHERE Field1='$v_Field1'"; //Executing The Query $rs = odbc_exec($conn,$sql); //Checking The Result Set if (!$rs) { exit("Error in SQL"); } echo "<p align='Center'><h1>The Results</h1></p>"; while ( odbc_fetch_row($rs) ) { $field1 = odbc_result($rs,1); $field2 = odbc_result($rs,2); $field3 = odbc_result($rs,3); echo "field1 : " . $field1 ; echo "field2 : " . $field2 ; echo "field3 : " . $field3 ; } $RowNumber = odbc_num_rows($rs); echo "The Number of Selected Rows = " . $RowsNumber ; //Closing The Connection odbc_close($conn); ?> 

Спасибо за вашу помощь 🙂

    odbc_num_rows кажется надежным только для запросов INSERT, UPDATE и DELETE.

    В руководстве написано:

    Используя odbc_num_rows (), чтобы определить количество строк, доступных после того, как SELECT вернет -1 со многими драйверами.

    одним из способов такого поведения является выполнение COUNT(*) в SQL вместо этого. См. Здесь пример.

    в php.net:

    Легкий способ подсчета строк в наборе результатов odbc, где драйвер возвращает -1, – это позволить SQL выполнить работу:

     <?php $conn = odbc_connect("dsn", "", ""); $rs = odbc_exec($conn, "SELECT Count(*) AS counter FROM tablename WHERE fieldname='" . $value . "'"); $arr = odbc_fetch_array($rs); echo $arr['counter']; ?> 

    На какой основе вы ожидаете, что odbc_num_rows вернет ничего, кроме -1?

    У нас есть факт из руководств, что OBDC не поддерживает @@ROWCOUNT / odbc_num_rows . Таким образом, нет оснований ожидать, что он «должен» вернуть что-либо иное, кроме документально, -1 при любых обстоятельствах.

    Даже если вы использовали Sybase напрямую (вместо ODBC), у вас будет такая же «проблема».

    • odbc_num_rows возвращает @@ROWCOUNT , который является строками, вставленными / обновленными / удаленными непосредственно предшествующей командой. -1 – это правильное документированное значение, если непосредственно предыдущая команда не вставляет / обновляет / удаляет.

    • Он не имеет ничего общего с строками в таблице .

    Используйте другую партию и один из документированных методов для получения строк в таблице и загрузите значение в переменную:

    • SELECT @Count = COUNT (*) – медленный, требует ввода / вывода
      или
    • SELECT @Count = ROW_COUNT (db_id, object_id) – очень быстро, без ввода-вывода

    Затем допросите массив результатов, чтобы получить переменную, а не odbc_num_rows , которая будет продолжать возвращать -1.