Как выполнить два запроса mysql как один в PHP / MYSQL?

У меня есть два запроса:

SELECT SQL_CALC_FOUND_ROWS Id, Name FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10; SELECT FOUND_ROWS(); 

Я хочу выполнить оба этих запроса в одной попытке.

 $result = mysql_query($query); 

Но тогда скажите мне, как я буду обрабатывать каждую таблицу отдельно. Фактически в ASP.NET мы используем набор данных, который обрабатывает два запроса как

 ds.Tables[0]; ds.Tables[1]; .. etc 

Как я могу сделать то же самое с помощью PHP / MYSQL?

Solutions Collecting From Web of "Как выполнить два запроса mysql как один в PHP / MYSQL?"

Обновление: возможно, возможно, передав флаг mysql_connect() . См. Выполнение нескольких SQL-запросов в одном выражении с помощью PHP. Тем не менее, любой текущий читатель должен избегать использования класса mysql_ функций и предпочитает PDO.

Вы не можете этого сделать, используя обычный mysql-api в PHP. Просто выполните два запроса. Второй будет настолько быстрым, что это не имеет значения. Это типичный пример микрооптимизации. Не беспокойтесь об этом.

Для записи это можно сделать с помощью mysqli и mysqli_multi_query -функции.

Как и другие, API-интерфейс mysqli может выполнять многозадачные запросы с помощью функции msyqli_multi_query ().

Для того, что стоит, PDO поддерживает по умолчанию многозадачный запрос, и вы можете перебирать несколько наборов результатов из ваших многочисленных запросов:

 $stmt = $dbh->prepare(" select sql_calc_found_rows * from foo limit 1 ; select found_rows()"); $stmt->execute(); do { while ($row = $stmt->fetch()) { print_r($row); } } while ($stmt->nextRowset()); 

Тем не менее, многопроцессор довольно широко считается плохой идеей по соображениям безопасности. Если вы не будете осторожны в том, как вы строите строки запроса, вы можете получить точный тип уязвимости SQL-инъекций, показанный в классическом мультфильме X Little Little Bobby Tables . При использовании API, который ограничивает вас одним запросом, этого не может быть.

С помощью SQL_CALC_FOUND_ROWS вы не можете.

Количество строк, доступное через FOUND_ROWS (), является переходным и не предназначено для доступности после оператора, следующего за оператором SELECT SQL_CALC_FOUND_ROWS.

Как заметил в предыдущем вопросе, использование SQL_CALC_FOUND_ROWS часто медленнее, чем просто подсчет.

Возможно, вам было бы лучше сделать это как подзапрос:

 SELECT (select count(*) from my_table WHERE Name LIKE '%prashant%') as total_rows, Id, Name FROM my_table WHERE Name LIKE '%prashant%' LIMIT 0, 10; 

Вам нужно будет использовать расширение MySQLi, если вы не хотите выполнять запрос дважды:

 if (mysqli_multi_query($link, $query)) { $result1 = mysqli_store_result($link); $result2 = null; if (mysqli_more_results($link)) { mysqli_next_result($link); $result2 = mysqli_store_result($link); } // do something with both result sets. if ($result1) mysqli_free_result($result1); if ($result2) mysqli_free_result($result2); } 

Как это:

 $result1 = mysql_query($query1); $result2 = mysql_query($query2); // do something with the 2 result sets... if ($result1) mysql_free_result($result1); if ($result2) mysql_free_result($result2); 

Вы должны использовать MySQLi, ниже код работает хорошо

 <?php $mysqli = new mysqli("localhost", "my_user", "my_password", "world"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } $query = "SELECT CURRENT_USER();"; $query .= "SELECT Name FROM City ORDER BY ID LIMIT 20, 5"; /* execute multi query */ if ($mysqli->multi_query($query)) { do { /* store first result set */ if ($result = $mysqli->store_result()) { while ($row = $result->fetch_row()) { printf("%s\n", $row[0]); } $result->free(); } /* print divider */ if ($mysqli->more_results()) { printf("-----------------\n"); } } while ($mysqli->next_result()); } /* close connection */ $mysqli->close(); ?> 

На PHP-сайте указано, что несколько запросов НЕ разрешены (EDIT: это верно только для расширения mysql. Mysqli и PDO позволяют несколько запросов). Поэтому вы не можете сделать это в PHP, НО, почему вы не можете просто выполнить этот запрос в другом вызове mysql_query (например, пример Джона)? Он должен по-прежнему давать правильный результат, если вы используете одно и то же соединение. Кроме того, mysql_num_rows также может помочь.

Да, это возможно без использования расширения MySQLi.

Просто используйте CLIENT_MULTI_STATEMENTS в 5-м аргументе mysql_connect .

Более подробную информацию см. В комментариях к сообщению Хусни .