Hi

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
>> Daarom bovenstaande vraag.

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
Daarom moest je?


Twee versies. De eerste met 3 uitgebreide enkele queries.

<?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 />';

?>


En de tweede met multi_query

<?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() );

?>
Mijn vraag was Waar/wanneer/waarom gebruiken JULLIE dit.
Niet hoe. Daar zijn inderdaad handleidingen voor. Ik geef trouwens de voorkeur van de handleidingen van w3school. ze zijn duidelijker.
Ik gebruik deze functie eigenlijk helemaal niet. Als ik zo zie kan je echt heel lastig debuggen.

Voor mij lijkt het een loze functie.
Heel zeker. Vandaar de vraag :)
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
Maak er een stored procedure van

 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

 CALL `spGrace`();

Nog niet gewerkt met store procedures. Ik ga dat eens bekijken.

Allen bedankt!

Jan
Andere redenen waarom de mysqli_multi_query() zinloos is, is omdat andere PHP drivers zoals 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.

Reageren