Да, это возможно без использования расширения MySQLi.
Просто используйте CLIENT_MULTI_STATEMENTS
в 5-м аргументе mysql_connect
.
Для получения дополнительной информации см. комментарии ниже сообщение Husni .
Как ответили другие, 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-инъекции, показанной в классическом мультфильме XKCD «Маленькие Бобби-столы» . При использовании API, который ограничивает вас одним запросом, этого не может быть.
Нравится это:
$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);
На сайте PHP указано, что несколько запросов НЕ разрешены (EDIT: Это верно только для расширения mysql. mysqli и PDO позволяют несколько запросов). Поэтому вы не можете сделать это в PHP, НО, почему вы не можете просто выполнить этот запрос в другом вызове mysql_query (например, пример Джона)? Он должен по-прежнему давать правильный результат, если вы используете одно и то же соединение. Кроме того, mysql_num_rows также может помочь.
С помощью SQL_CALC_FOUND_ROWS
вы не можете.
Число строк, доступное через FOUND_ROWS (), является переходным и не предназначено для доступа к оператору после инструкции SELECT SQL_CALC_FOUND_ROWS.
blockquote>Как заметил кто-то в вашем предыдущем вопросе, использование
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, ниже код работает хорошо
<?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();
?>