복붙노트

PHP / MYSQL에서 두 개의 mysql 쿼리를 실행하는 방법은 무엇입니까?

PHP

PHP / 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. ==============================

    1.업데이트 : mysql_connect ()에 플래그를 전달하면 분명히 가능합니다. PHP를 사용하여 한 문장으로 여러 SQL 쿼리 실행하기를 참고하십시오. 그러나 현재의 모든 독자는 mysql_ 클래스의 함수를 사용하지 말고 PDO를 선호해야합니다.

    업데이트 : mysql_connect ()에 플래그를 전달하면 분명히 가능합니다. PHP를 사용하여 한 문장으로 여러 SQL 쿼리 실행하기를 참고하십시오. 그러나 현재의 모든 독자는 mysql_ 클래스의 함수를 사용하지 말고 PDO를 선호해야합니다.

    PHP에서 일반적인 mysql-api를 사용하면 그렇게 할 수 없습니다. 두 개의 쿼리 만 실행하면됩니다. 두 번째 것은 너무 빠르기 때문에 중요하지 않습니다. 이것은 마이크로 최적화의 전형적인 예입니다. 그것에 대해 걱정하지 마십시오.

    기록을 위해, mysqli와 mysqli_multi_query 함수를 사용하여 수행 할 수있다.

  2. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    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. ==============================

    7.그것은 PHP 사이트에서 여러 개의 쿼리가 허용되지 않는다고 말합니다 (편집 : 이것은 mysql 확장에 대해서만 해당되며, mysqli와 PDO는 다중 쿼리를 허용합니다) . PHP에서는 그렇게 할 수 없지만 Jon의 예제와 같이 다른 mysql_query 호출에서 그 쿼리를 실행할 수는없는 이유는 무엇입니까? 동일한 연결을 사용하면 올바른 결과를 얻을 수 있습니다. 또한 mysql_num_rows도 도움이 될 수있다.

    그것은 PHP 사이트에서 여러 개의 쿼리가 허용되지 않는다고 말합니다 (편집 : 이것은 mysql 확장에 대해서만 해당되며, mysqli와 PDO는 다중 쿼리를 허용합니다) . PHP에서는 그렇게 할 수 없지만 Jon의 예제와 같이 다른 mysql_query 호출에서 그 쿼리를 실행할 수는없는 이유는 무엇입니까? 동일한 연결을 사용하면 올바른 결과를 얻을 수 있습니다. 또한 mysql_num_rows도 도움이 될 수있다.

  8. ==============================

    8.네, MySQLi 확장을 사용하지 않고 가능합니다.

    네, MySQLi 확장을 사용하지 않고 가능합니다.

    mysql_connect의 다섯 번째 인수에서 CLIENT_MULTI_STATEMENTS를 사용하기 만하면됩니다.

    자세한 내용은 Husni의 게시물 아래에있는 의견을 참조하십시오.

  9. from https://stackoverflow.com/questions/802437/how-to-execute-two-mysql-queries-as-one-in-php-mysql by cc-by-sa and MIT license