Пока я создаю веб-страницу в моем веб-приложении Мое приложение, 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 – это правильное документированное значение, если непосредственно предыдущая команда не вставляет / обновляет / удаляет.
Он не имеет ничего общего с строками в таблице .
Используйте другую партию и один из документированных методов для получения строк в таблице и загрузите значение в переменную:
Затем допросите массив результатов, чтобы получить переменную, а не odbc_num_rows
, которая будет продолжать возвращать -1.