Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
SQL Server için PHP için Microsoft Sürücüleri, sunucuya büyük nesneler göndermek için PHP akışlarından yararlanır. Bu konudaki örneklerde verilerin akış olarak nasıl gönderılabileceği gösterilmektedir. İlk örnek, sorgu yürütme sırasında tüm akış verilerini göndermek için varsayılan davranışı göstermek için SQLSRV sürücüsünü kullanır. İkinci örnekte, sunucuya aynı anda en fazla sekiz kilobayt (8 kB) akış verisi göndermeyi göstermek için SQLSRV sürücüsü kullanılır.
Üçüncü örnekte, PDO_SQLSRV sürücüsünü kullanarak sunucuya akış verilerinin nasıl gönderılabileceği gösterilmektedir.
Örnek: Yürütme sırasında Akış Verileri Gönderme
Aşağıdaki örnek, AdventureWorks veritabanının Production.ProductReview tablosuna bir satır ekler. Müşteri yorumları ($comments) PHP fopen işleviyle bir akış olarak açılır ve sorgunun yürütülmesinden sonra sunucuya akış yapılır.
Örnekte SQL Server ve AdventureWorks veritabanının yerel bilgisayarda yüklü olduğu varsayılır. Tüm çıkış konsola yazılır.
<?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);
?>
Örnek: sqlsrv_send_stream_data Kullanarak Akış Verileri Gönderme
Sonraki örnek önceki örnekle aynıdır, ancak yürütme sırasında tüm akış verilerini göndermenin varsayılan davranışı kapalıdır. Örnek, akış verilerini sunucuya göndermek için sqlsrv_send_stream_data kullanır. Her sqlsrv_send_stream_data çağrısıyla en fazla sekiz kilobayt (8 kB) veri gönderilir. Betik, sqlsrv_send_stream_data tarafından yapılan çağrı sayısını sayar ve sayıyı konsolda görüntüler.
Örnekte SQL Server ve AdventureWorks veritabanının yerel bilgisayarda yüklü olduğu varsayılır. Tüm çıkış konsola yazılır.
<?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);
?>
Bu konudaki örnekler sunucuya karakter verileri gönderse de, herhangi bir biçimdeki veriler akış olarak gönderilebilir. Örneğin, görüntüleri ikili biçimde akış olarak göndermek için bu konuda gösterilen teknikleri de kullanabilirsiniz.
Örnek: Bir Görüntüyü Akış Olarak Gönderme
<?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();
?>
Ayrıca Bkz.
Verileri Güncelleştirme (SQL Server için PHP için Microsoft Sürücüleri)