Cara: Mengirim Data sebagai Aliran
Driver Microsoft untuk PHP untuk SQL Server memanfaatkan aliran PHP untuk mengirim objek besar ke server. Contoh dalam topik ini menunjukkan cara mengirim data sebagai aliran. Contoh pertama menggunakan driver SQLSRV untuk menunjukkan perilaku default, yaitu mengirim semua data aliran pada saat eksekusi kueri. Contoh kedua menggunakan driver SQLSRV untuk menunjukkan cara mengirim hingga delapan kilobyte (8 kB) data aliran sekali waktu ke server.
Contoh ketiga menunjukkan cara mengirim data streaming ke server menggunakan driver PDO_SQLSRV.
Contoh: Mengirim Data Aliran saat Eksekusi
Contoh berikut menyisipkan baris ke dalam tabel Production.ProductReview database AdventureWorks. Komentar pelanggan ($comments) dibuka sebagai aliran dengan fungsi fopen PHP dan kemudian dialirkan ke server setelah eksekusi kueri.
Contoh mengasumsikan bahwa SQL Server dan database AdventureWorks diinstal di komputer lokal. Semua output ditulis ke konsol.
<?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);
?>
Contoh: Mengirim Data Aliran Menggunakan sqlsrv_send_stream_data
Contoh berikutnya sama dengan contoh sebelumnya, tetapi perilaku default mengirim semua data aliran saat eksekusi dinonaktifkan. Contohnya menggunakan sqlsrv_send_stream_data untuk mengirim data aliran ke server. Hingga delapan kilobyte (8 kB) data dikirim dengan setiap panggilan ke sqlsrv_send_stream_data. Skrip menghitung jumlah panggilan yang dilakukan oleh sqlsrv_send_stream_data dan menampilkan hitungan ke konsol.
Contoh mengasumsikan bahwa SQL Server dan database AdventureWorks diinstal di komputer lokal. Semua output ditulis ke konsol.
<?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);
?>
Meskipun contoh dalam topik ini mengirim data karakter ke server, data dalam format apa pun dapat dikirim sebagai aliran. Misalnya, Anda juga dapat menggunakan teknik yang ditunjukkan dalam topik ini untuk mengirim gambar dalam format biner sebagai aliran.
Contoh: Mengirim Gambar sebagai Aliran
<?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();
?>
Lihat Juga
Memperbarui Data (Driver Microsoft untuk PHP untuk SQL Server)