Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
De Microsoft-stuurprogramma's voor PHP voor SQL Server maken gebruik van PHP-streams voor het verzenden van grote objecten naar de server. De voorbeelden in dit onderwerp laten zien hoe u gegevens als een stream verzendt. In het eerste voorbeeld wordt het SQLSRV-stuurprogramma gebruikt om het standaardgedrag te demonstreren. Dit is het verzenden van alle streamgegevens op het moment van het uitvoeren van query's. In het tweede voorbeeld wordt het SQLSRV-stuurprogramma gebruikt om te laten zien hoe u maximaal acht kilobytes (8 kB) aan streamgegevens tegelijk naar de server verzendt.
In het derde voorbeeld ziet u hoe u streamgegevens naar de server verzendt met behulp van het PDO_SQLSRV-stuurprogramma.
Voorbeeld: Stream-gegevens verzenden bij uitvoering
In het volgende voorbeeld wordt een rij ingevoegd in de tabel Production.ProductReview van de AdventureWorks-database. De opmerkingen van de klant ($comments) worden geopend als een stream met de PHP-fopen-functie en vervolgens gestreamd naar de server na uitvoering van de query.
In het voorbeeld wordt ervan uitgegaan dat SQL Server en de AdventureWorks-database op de lokale computer zijn geïnstalleerd. Alle uitvoer wordt naar de console geschreven.
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Set up the Transact-SQL query. */
$tsql = "INSERT INTO Production.ProductReview (ProductID,
ReviewerName,
ReviewDate,
EmailAddress,
Rating,
Comments)
VALUES (?, ?, ?, ?, ?, ?)";
/* Set the parameter values and put them in an array.
Note that $comments is opened as a stream. */
$productID = '709';
$name = 'Customer Name';
$date = date("Y-m-d");
$email = 'customer@name.com';
$rating = 3;
$data = 'Insert any lengthy comment here.';
$comments = fopen('data:text/plain,'.urlencode($data), 'r');
$params = array($productID, $name, $date, $email, $rating, $comments);
/* Execute the query. All stream data is sent upon execution.*/
$stmt = sqlsrv_query($conn, $tsql, $params);
if ($stmt === false) {
echo "Error in statement execution.\n";
die( print_r( sqlsrv_errors(), true));
} else {
echo "The query was successfully executed.";
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
Voorbeeld: Streamgegevens verzenden met behulp van sqlsrv_send_stream_data
Het volgende voorbeeld is hetzelfde als in het voorgaande voorbeeld, maar het standaardgedrag van het verzenden van alle streamgegevens tijdens de uitvoering is uitgeschakeld. In het voorbeeld wordt sqlsrv_send_stream_data gebruikt om streamgegevens naar de server te verzenden. Er worden maximaal acht kilobytes (8 kB) aan gegevens verzonden met elke aanroep naar sqlsrv_send_stream_data. Het script telt het aantal aanroepen van sqlsrv_send_stream_data en geeft het aantal weer voor de console.
In het voorbeeld wordt ervan uitgegaan dat SQL Server en de AdventureWorks-database op de lokale computer zijn geïnstalleerd. Alle uitvoer wordt naar de console geschreven.
<?php
/* Connect to the local server using Windows Authentication and
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if ($conn === false) {
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Set up the Transact-SQL query. */
$tsql = "INSERT INTO Production.ProductReview (ProductID,
ReviewerName,
ReviewDate,
EmailAddress,
Rating,
Comments)
VALUES (?, ?, ?, ?, ?, ?)";
/* Set the parameter values and put them in an array.
Note that $comments is opened as a stream. */
$productID = '709';
$name = 'Customer Name';
$date = date("Y-m-d");
$email = 'customer@name.com';
$rating = 3;
$data = 'Insert any lengthy comment here.';
$comments = fopen('data:text/plain,'.urlencode($data), 'r');
$params = array($productID, $name, $date, $email, $rating, $comments);
/* Turn off the default behavior of sending all stream data at
execution. */
$options = array("SendStreamParamsAtExec" => 0);
/* Execute the query. */
$stmt = sqlsrv_query($conn, $tsql, $params, $options);
if ($stmt === false) {
echo "Error in statement execution.\n";
die( print_r( sqlsrv_errors(), true));
}
/* Send up to 8K of parameter data to the server with each call to
sqlsrv_send_stream_data. Count the calls. */
$i = 1;
while (sqlsrv_send_stream_data($stmt)) {
echo "$i call(s) made.\n";
$i++;
}
/* Free statement and connection resources. */
sqlsrv_free_stmt( $stmt);
sqlsrv_close( $conn);
?>
Hoewel de voorbeelden in dit onderwerp karaktergegevens naar de server verzenden, kan data in elk formaat als een stream worden verzonden. U kunt bijvoorbeeld ook de technieken gebruiken die in dit onderwerp worden gedemonstreerd om afbeeldingen in binaire indeling als streams te verzenden.
Voorbeeld: Een afbeelding verzenden als een stream
<?php
$server = "(local)";
$database = "Test";
$conn = new PDO( "sqlsrv:server=$server;Database = $database", "", "");
$binary_source = fopen( "data://text/plain,", "r");
$stmt = $conn->prepare("insert into binaries (imagedata) values (?)");
$stmt->bindParam(1, $binary_source, PDO::PARAM_LOB);
$conn->beginTransaction();
$stmt->execute();
$conn->commit();
?>
Zie ook
Gegevens bijwerken (Microsoft-stuurprogramma's voor PHP voor SQL Server)
Gegevens ophalen als stream met behulp van het SQLSRV-stuurprogramma