Несколько таблиц данных в PHP/MySQL?


В asp.net , вы можете получить НЕСКОЛЬКО таблиц данных из одного вызова базы данных. Можете ли вы сделать то же самое в php?

Пример:

$sql ="select * from t1; select * from t2;";
$result = SomeQueryFunc($sql);
print_r($result[0]); // dump results for t1
print_r($result[1]); // dump results for t2

Можете ли вы сделать что-то подобное?

Author: genesis, 2008-10-13

4 answers

Это называется "множественный запрос". Расширение mysql в PHP не имеет никаких средств для включения нескольких запросов. Расширение mysqli позволяет использовать несколько запросов, но только с помощью метода multi_query(). См. http://php.net/manual/en/mysqli.multi-query.php

Использование нескольких запросов не рекомендуется, поскольку это может увеличить потенциальный ущерб, причиняемый атаками с использованием SQL-инъекций. Если вы используете несколько запросов, вам следует использовать строгие методы проверки кода, чтобы избежать SQL уязвимость к инъекциям.

 3
Author: Bill Karwin, 2008-10-13 21:19:34

Это должно быть возможно с более новым MySQL и расширением mysqli (улучшенным) php. Я не уверен, поддерживают ли это какие-либо уровни абстракции БД.

Смотрите соответствующие документы MySQL и Документы PHP.

 0
Author: gnud, 2008-10-13 19:04:40

PDOStatement::nextRowset() похоже, это то, что тебе нужно.

 0
Author: Kornel, 2011-11-13 11:59:46

Если вы используете классический MySQL, вы не можете. Вы можете создать функцию, которая будет выглядеть как

function SomeQueryFunc($queries) {
    $queries = explode(';', $queries);
    $return = array();
    foreach($queries as $index => $query) {
        $result = mysql_query($query);
        $return[$index] = array();
        while($row = mysql_fetch_assoc($result)) {
           foreach($row as $column => $value) {
              $return[$index][$column] = $value;
           }
        }
    }
    return $return;
}

Который будет работать так, как ожидалось

 0
Author: genesis, 2011-11-13 12:11:54