mysqli_multi_query: Waar/wanneer/waarom gebruiken jullie dit
Ik heb mijn eerste query gemaakt welke gebruik maat van sql variabelen. Daarom moest ik ook gebruik maken van mysqli_multi_query.
Daarom bovenstaande vraag.
Jan
Graag voortaan je vraag gewoon in het bericht zelf plaatsen en niet alleen in de titel.
mysqli_multi_query
Daar hebben we een handleiding voor die uitlegt wanneer je dat gebruikt:
https://www.php.net/mysqli_multi_query
Twee versies. De eerste met 3 uitgebreide enkele queries.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
include ('connect.php');
$q = "SELECT @voornaam := 'Grace' AS voornaam;";
$r = $db->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'Voornaam = <b>' . $row->voornaam . '</b><br />';
?>
<hr />
<?php
$q = "SELECT @achternaam := 'Union' AS achternaam;";
$r = $db->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'Achternaam = <b>' . $row->achternaam . '</b><br />';
?>
<hr />
<?php
$q = "SELECT CONCAT( @voornaam, ' ', @achternaam ) AS volledig;";
$r = $db->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'Volledig = <b>' . $row->volledig . '</b><br />';
?>
include ('connect.php');
$q = "SELECT @voornaam := 'Grace' AS voornaam;";
$r = $db->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'Voornaam = <b>' . $row->voornaam . '</b><br />';
?>
<hr />
<?php
$q = "SELECT @achternaam := 'Union' AS achternaam;";
$r = $db->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'Achternaam = <b>' . $row->achternaam . '</b><br />';
?>
<hr />
<?php
$q = "SELECT CONCAT( @voornaam, ' ', @achternaam ) AS volledig;";
$r = $db->query( $q );
$row = $r->fetch_object();
echo $q . '<br />';
echo '<pre>' . print_r( $r, TRUE ) . '</pre>';
echo '<pre>' . print_r( $row, TRUE ) . '</pre>';
echo 'Volledig = <b>' . $row->volledig . '</b><br />';
?>
En de tweede met multi_query
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?php
include ('connect.php');
$query = "SELECT @voornaam := 'Grace' AS voornaam;";
$query .= "SELECT @achternaam := 'Union' AS achternaam;";
$query .= "SELECT CONCAT( @voornaam, ' ', @achternaam ) AS volledig;";
/* execute multi query */
$db->multi_query( $query );
do {
/* store the result set in PHP */
if ( $result = $db->store_result() ):
while ( $row = $result->fetch_row() ):
printf("%s\n", $row[0]);
endwhile;
endif;
/* print divider */
if ( $db->more_results() ):
echo '<hr />';
endif;
} while ( $db->next_result() );
?>
include ('connect.php');
$query = "SELECT @voornaam := 'Grace' AS voornaam;";
$query .= "SELECT @achternaam := 'Union' AS achternaam;";
$query .= "SELECT CONCAT( @voornaam, ' ', @achternaam ) AS volledig;";
/* execute multi query */
$db->multi_query( $query );
do {
/* store the result set in PHP */
if ( $result = $db->store_result() ):
while ( $row = $result->fetch_row() ):
printf("%s\n", $row[0]);
endwhile;
endif;
/* print divider */
if ( $db->more_results() ):
echo '<hr />';
endif;
} while ( $db->next_result() );
?>
Niet hoe. Daar zijn inderdaad handleidingen voor. Ik geef trouwens de voorkeur van de handleidingen van w3school. ze zijn duidelijker.
Voor mij lijkt het een loze functie.
Echter als ik zo een query splits kan ik geen variabelen gebruiken en hier wou ik dat toch wel.
via een omwegje kan ik ze natuurlijk wel toevoegen aan de lose query's
Code (php)
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
DELIMITER ;;
DROP PROCEDURE IF EXISTS `spGrace`;;
CREATE PROCEDURE `spGrace`()
BEGIN
SET @vn = (SELECT @voornaam := 'Grace' AS voornaam);
SET @an = (SELECT @achternaam := 'Union' AS achternaam);
SELECT CONCAT( @vn, ' ', @an ) AS volledig;
END;;
DELIMITER ;
DROP PROCEDURE IF EXISTS `spGrace`;;
CREATE PROCEDURE `spGrace`()
BEGIN
SET @vn = (SELECT @voornaam := 'Grace' AS voornaam);
SET @an = (SELECT @achternaam := 'Union' AS achternaam);
SELECT CONCAT( @vn, ' ', @an ) AS volledig;
END;;
DELIMITER ;
En dan
Allen bedankt!
Jan
Postgres het niet ondersteunen.
Daarbij kan je in MySQL 8 (niets te vroeg) meerdere query's in een enkele query stoppen dankzij CTE.
Kortom, niemand heeft het ooit nodig gehad, het is de zoveelste dubbele functie in PHP waardoor je soms door de bomen het bos niet meer ziet.
Andere redenen waarom de mysqli_multi_query() zinloos is, is omdat andere PHP drivers zoals Daarbij kan je in MySQL 8 (niets te vroeg) meerdere query's in een enkele query stoppen dankzij CTE.
Kortom, niemand heeft het ooit nodig gehad, het is de zoveelste dubbele functie in PHP waardoor je soms door de bomen het bos niet meer ziet.