Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Jeśli używasz sterownika PDO_SQLSRV, możesz określić kodowanie za pomocą atrybutu PDO::SQLSRV_ATTR_ENCODING. Aby uzyskać więcej informacji, zobacz Stałe (sterowniki firmy Microsoft dla języka PHP dla programu SQL Server).
W pozostałej części tego tematu omówiono kodowanie za pomocą sterownika SQLSRV.
Aby wysłać lub pobrać zakodowane dane UTF-8 na serwerze:
Upewnij się, że kolumna źródłowa lub docelowa ma typ nchar lub nvarchar.
Określ typ PHP, tak jak
SQLSRV_PHPTYPE_STRING('UTF-8')w tablicy parametrów. Możesz też określić"CharacterSet" => "UTF-8"jako opcję połączenia.Po określeniu zestawu znaków w ramach opcji połączenia sterownik zakłada, że inne parametry opcji połączenia używają tego samego zestawu znaków. Nazwa serwera i ciągi zapytania są również zakładane, aby używać tego samego zestawu znaków.
Możesz przekazać kod UTF-8 lub SQLSRV_ENC_CHAR do zestawu znaków, ale nie można przekazać SQLSRV_ENC_BINARY. Domyślne kodowanie to SQLSRV_ENC_CHAR.
Przykład połączenia
W poniższym przykładzie pokazano, jak wysyłać i pobierać zakodowane dane UTF-8, określając zestaw znaków UTF-8 podczas nawiązywania połączenia. Przykład aktualizuje kolumnę Komentarze tabeli Production.ProductReview dla określonego identyfikatora przeglądu. Przykład pobiera również nowo zaktualizowane dane i wyświetla je. Zwróć uwagę, że kolumna Komentarze jest typu nvarchar(3850). Należy również pamiętać, że przed wysłaniem danych na serwer jest konwertowany na kodowanie UTF-8 przy użyciu funkcji utf8_encode PHP. Odbywa się to tylko w celach demonstracyjnych. W rzeczywistym scenariuszu aplikacji zaczniesz od zakodowanych danych UTF-8.
W tym przykładzie przyjęto założenie, że na komputerze lokalnym zainstalowano program SQL Server i bazę danych AdventureWorks . Wszystkie dane wyjściowe są zapisywane w przeglądarce po uruchomieniu przykładu z przeglądarki.
<?php
// Connect to the local server using Windows Authentication and
// specify the AdventureWorks database as the database in use.
//
$serverName = "<server>";
$connectionInfo = array( "Database"=>"AdventureWorks", "CharacterSet" => "UTF-8");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if ( $conn === false ) {
echo "Could not connect.<br>";
die( print_r( sqlsrv_errors(), true));
}
// Set up the Transact-SQL query.
//
$tsql1 = "UPDATE Production.ProductReview
SET Comments = ?
WHERE ProductReviewID = ?";
// Set the parameter values and put them in an array. Note that
// $comments is converted to UTF-8 encoding with the PHP function
// utf8_encode to simulate an application that uses UTF-8 encoded data.
//
$reviewID = 3;
$comments = utf8_encode("testing 1, 2, 3, 4. Testing.");
$params1 = array(
array( $comments, null ),
array( $reviewID, null )
);
// Execute the query.
//
$stmt1 = sqlsrv_query($conn, $tsql1, $params1);
if ( $stmt1 === false ) {
echo "Error in statement execution.<br>";
die( print_r( sqlsrv_errors(), true));
}
else {
echo "The update was successfully executed.<br>";
}
// Retrieve the newly updated data.
//
$tsql2 = "SELECT Comments
FROM Production.ProductReview
WHERE ProductReviewID = ?";
// Set up the parameter array.
//
$params2 = array($reviewID);
// Execute the query.
//
$stmt2 = sqlsrv_query($conn, $tsql2, $params2);
if ( $stmt2 === false ) {
echo "Error in statement execution.<br>";
die( print_r( sqlsrv_errors(), true));
}
// Retrieve and display the data.
//
if ( sqlsrv_fetch($stmt2) ) {
echo "Comments: ";
$data = sqlsrv_get_field( $stmt2, 0 );
echo $data."<br>";
}
else {
echo "Error in fetching data.<br>";
die( print_r( sqlsrv_errors(), true));
}
// Free statement and connection resources.
//
sqlsrv_free_stmt( $stmt1 );
sqlsrv_free_stmt( $stmt2 );
sqlsrv_close( $conn);
?>
Aby uzyskać informacje na temat przechowywania danych Unicode, zobacz Praca z danymi Unicode.
Przykład kolumny
Poniższy przykład jest podobny do pierwszego przykładu, ale zamiast określać zestaw znaków UTF-8 w połączeniu, w tym przykładzie pokazano, jak określić zestaw znaków UTF-8 w kolumnie.
<?php
// Connect to the local server using Windows Authentication and
// specify the AdventureWorks database as the database in use.
//
$serverName = "<server>";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if ( $conn === false ) {
echo "Could not connect.<br>";
die( print_r( sqlsrv_errors(), true));
}
// Set up the Transact-SQL query.
//
$tsql1 = "UPDATE Production.ProductReview
SET Comments = ?
WHERE ProductReviewID = ?";
// Set the parameter values and put them in an array. Note that
// $comments is converted to UTF-8 encoding with the PHP function
// utf8_encode to simulate an application that uses UTF-8 encoded data.
//
$reviewID = 3;
$comments = utf8_encode("testing");
$params1 = array(
array($comments,
SQLSRV_PARAM_IN,
SQLSRV_PHPTYPE_STRING('UTF-8')
),
array($reviewID)
);
// Execute the query.
//
$stmt1 = sqlsrv_query($conn, $tsql1, $params1);
if ( $stmt1 === false ) {
echo "Error in statement execution.<br>";
die( print_r( sqlsrv_errors(), true));
}
else {
echo "The update was successfully executed.<br>";
}
// Retrieve the newly updated data.
//
$tsql2 = "SELECT Comments
FROM Production.ProductReview
WHERE ProductReviewID = ?";
// Set up the parameter array.
//
$params2 = array($reviewID);
// Execute the query.
//
$stmt2 = sqlsrv_query($conn, $tsql2, $params2);
if ( $stmt2 === false ) {
echo "Error in statement execution.<br>";
die( print_r( sqlsrv_errors(), true));
}
// Retrieve and display the data.
//
if ( sqlsrv_fetch($stmt2) ) {
echo "Comments: ";
$data = sqlsrv_get_field($stmt2,
0,
SQLSRV_PHPTYPE_STRING('UTF-8')
);
echo $data."<br>";
}
else {
echo "Error in fetching data.<br>";
die( print_r( sqlsrv_errors(), true));
}
// Free statement and connection resources.
//
sqlsrv_free_stmt( $stmt1 );
sqlsrv_free_stmt( $stmt2 );
sqlsrv_close( $conn);
?>
Treści powiązane
- Pobieranie danych
- Instrukcje: wysyłanie i pobieranie danych ASCII w systemach Linux i macOS
- Aktualizacja danych (sterowniki Microsoft dla PHP dla SQL Server)
- Dokumentacja interfejsu API sterownika SQLSRV
- Stałe (sterowniki firmy Microsoft dla języka PHP dla programu SQL Server)
- Przykładowa aplikacja (sterownik SQLSRV)