PHP / MYSQL에서 두 개의 mysql 쿼리를 실행하는 방법은 무엇입니까?
PHPPHP / MYSQL에서 두 개의 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을 사용하여 어떻게 동일한 작업을 수행 할 수 있습니까?
해결법
-
==============================
1.업데이트 : mysql_connect ()에 플래그를 전달하면 분명히 가능합니다. PHP를 사용하여 한 문장으로 여러 SQL 쿼리 실행하기를 참고하십시오. 그러나 현재의 모든 독자는 mysql_ 클래스의 함수를 사용하지 말고 PDO를 선호해야합니다.
업데이트 : mysql_connect ()에 플래그를 전달하면 분명히 가능합니다. PHP를 사용하여 한 문장으로 여러 SQL 쿼리 실행하기를 참고하십시오. 그러나 현재의 모든 독자는 mysql_ 클래스의 함수를 사용하지 말고 PDO를 선호해야합니다.
PHP에서 일반적인 mysql-api를 사용하면 그렇게 할 수 없습니다. 두 개의 쿼리 만 실행하면됩니다. 두 번째 것은 너무 빠르기 때문에 중요하지 않습니다. 이것은 마이크로 최적화의 전형적인 예입니다. 그것에 대해 걱정하지 마십시오.
기록을 위해, mysqli와 mysqli_multi_query 함수를 사용하여 수행 할 수있다.
-
==============================
2.다른 사람들이 대답 했으므로, mysqli API는 msyqli_multi_query () 함수로 다중 쿼리를 실행할 수있다.
다른 사람들이 대답 했으므로, mysqli API는 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());
그러나 다중 쿼리는 보안상의 이유로 널리 널리 사용되고 있습니다. 쿼리 문자열을 구성하는 방법에 대해 신중하지 않으면 고전적인 "Little Bobby Tables"XKCD 만화에 표시된 정확한 SQL 주입 취약점 유형을 실제로 얻을 수 있습니다. 단일 쿼리로 제한하는 API를 사용할 때 그런 일은 발생할 수 없습니다.
-
==============================
3.SQL_CALC_FOUND_ROWS를 사용할 수 없습니다.
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;
-
==============================
4.쿼리를 두 번 실행하지 않으려면 MySQLi 확장을 사용해야합니다.
쿼리를 두 번 실행하지 않으려면 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); }
-
==============================
5.이렇게 :
이렇게 :
$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);
-
==============================
6.당신은 아래 코드가 잘 작동하는 MySQLi를 사용해야한다.
당신은 아래 코드가 잘 작동하는 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(); ?>
-
==============================
7.그것은 PHP 사이트에서 여러 개의 쿼리가 허용되지 않는다고 말합니다 (편집 : 이것은 mysql 확장에 대해서만 해당되며, mysqli와 PDO는 다중 쿼리를 허용합니다) . PHP에서는 그렇게 할 수 없지만 Jon의 예제와 같이 다른 mysql_query 호출에서 그 쿼리를 실행할 수는없는 이유는 무엇입니까? 동일한 연결을 사용하면 올바른 결과를 얻을 수 있습니다. 또한 mysql_num_rows도 도움이 될 수있다.
그것은 PHP 사이트에서 여러 개의 쿼리가 허용되지 않는다고 말합니다 (편집 : 이것은 mysql 확장에 대해서만 해당되며, mysqli와 PDO는 다중 쿼리를 허용합니다) . PHP에서는 그렇게 할 수 없지만 Jon의 예제와 같이 다른 mysql_query 호출에서 그 쿼리를 실행할 수는없는 이유는 무엇입니까? 동일한 연결을 사용하면 올바른 결과를 얻을 수 있습니다. 또한 mysql_num_rows도 도움이 될 수있다.
-
==============================
8.네, MySQLi 확장을 사용하지 않고 가능합니다.
네, MySQLi 확장을 사용하지 않고 가능합니다.
mysql_connect의 다섯 번째 인수에서 CLIENT_MULTI_STATEMENTS를 사용하기 만하면됩니다.
자세한 내용은 Husni의 게시물 아래에있는 의견을 참조하십시오.
from https://stackoverflow.com/questions/802437/how-to-execute-two-mysql-queries-as-one-in-php-mysql by cc-by-sa and MIT license
'PHP' 카테고리의 다른 글
경고 : mysqli_query ()는 적어도 2 개의 매개 변수를 필요로한다. 뭐? (0) | 2018.09.10 |
---|---|
동적 테이블 이름으로 SQL 주입을 방지하는 방법은 무엇입니까? (0) | 2018.09.10 |
MySQL 대신 MySQLi를 사용해야하는시기는 언제입니까? (0) | 2018.09.10 |
"2-1"과 같은 문자열을 수학적으로 평가하여 "1"을 생성하는 방법은 무엇입니까? (0) | 2018.09.10 |
PHP는 다운로드를 위해 파일을 생성 한 다음 리디렉션합니다. (0) | 2018.09.10 |