3

asp.net では、データベースへの 1 回の呼び出しで複数のデータ テーブルを取得できます。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

このようなことができますか?

4

4 に答える 4

3

これを「マルチクエリ」と呼びます。PHP の mysql 拡張機能には、マルチクエリを有効にする手段がありません。mysqli 拡張機能を使用すると、マルチクエリを使用できますが、multi_query() メソッドを介してのみ使用できます。http://php.net/manual/en/mysqli.multi-query.phpを参照してください。

マルチクエリの使用はお勧めできません。SQL インジェクション攻撃による潜在的な損害が増加する可能性があるためです。マルチクエリを使用する場合は、SQL インジェクションの脆弱性を回避するために、厳密なコード検査の習慣を使用する必要があります。

于 2008-10-13T21:19:34.297 に答える
0

これは、新しいMySQLとmysqli(改良された)php拡張機能で可能になるはずです。DB抽象化レイヤーがこれをサポートしているかどうかはわかりません。

関連するMySQLドキュメントPHPドキュメントを参照してください。

于 2008-10-13T19:04:40.607 に答える
0

PDOStatement::nextRowset()あなたが求めているもののようです。

于 2008-10-13T19:08:35.247 に答える
0

従来の 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;
}

これは期待どおりに機能します

于 2011-11-13T12:11:54.143 に答える