Delen via


Hoe: ASCII-gegevens verzenden en ophalen in Linux en macOS

PHP-stuurprogramma downloaden

In dit artikel wordt ervan uitgegaan dat de ASCII-landinstellingen (niet-UTF-8) zijn gegenereerd of geïnstalleerd in uw Linux- of macOS-systemen.

ASCII-tekensets verzenden of ophalen naar de server:

  1. Als de gewenste landinstelling niet de standaardinstelling is in uw systeemomgeving, moet u ervoor zorgen dat u aanroept setlocale(LC_ALL, $locale) voordat u de eerste verbinding maakt. De functie PHP setlocale() wijzigt de landinstelling alleen voor het huidige script en als deze wordt aangeroepen nadat de eerste verbinding is gemaakt, kan deze worden genegeerd.

  2. Wanneer u het SQLSRV-stuurprogramma gebruikt, kunt u opgeven 'CharacterSet' => SQLSRV_ENC_CHAR als een verbindingsoptie, maar deze stap is optioneel omdat dit de standaardcodering is.

  3. Wanneer u het stuurprogramma PDO_SQLSRV gebruikt, zijn er twee manieren. Stel eerst PDO::SQLSRV_ATTR_ENCODING in op PDO::SQLSRV_ENCODING_SYSTEM wanneer u de verbinding maakt (voor een voorbeeld van het instellen van een verbindingsoptie, zie PDO::__construct). U kunt deze regel ook toevoegen nadat de verbinding is geslaagd $conn->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_SYSTEM);

Wanneer u de codering van een verbindingsresource (in SQLSRV) of verbindingsobject (PDO_SQLSRV) opgeeft, gaat het stuurprogramma ervan uit dat de andere verbindingsoptiereeksen dezelfde codering gebruiken. Ook wordt ervan uitgegaan dat de servernaam en queryreeksen dezelfde tekenset gebruiken.

De standaardcodering voor PDO_SQLSRV-stuurprogramma is UTF-8 (PDO::SQLSRV_ENCODING_UTF8), in tegenstelling tot het SQLSRV-stuurprogramma. Zie Constanten (Microsoft-stuurprogramma's voor PHP voor SQL Server) voor meer informatie over deze constanten.

Example

In de volgende voorbeelden ziet u hoe u ASCII-gegevens verzendt en ophaalt met behulp van de PHP-stuurprogramma's voor SQL Server door een bepaalde landinstelling op te geven voordat u de verbinding maakt. De landinstellingen op verschillende Linux-platforms kunnen anders worden genoemd dan dezelfde landinstellingen in macOS. De Amerikaanse ISO-8859-1 (Latijns 1) landinstelling bevindt zich bijvoorbeeld als en_US.ISO-8859-1 in Linux, terwijl in macOS de naam en_US.ISO8859-1 is.

In de voorbeelden wordt ervan uitgegaan dat SQL Server op een server is geïnstalleerd. Alle uitvoer wordt naar de browser geschreven wanneer de voorbeelden vanuit de browser worden uitgevoerd.

<?php  
  
// SQLSRV Example
//
// Setting locale for the script is only necessary if Latin 1 is not the default 
// in the environment
$locale = strtoupper(PHP_OS) === 'LINUX' ? 'en_US.ISO-8859-1' : 'en_US.ISO8859-1';
setlocale(LC_ALL, $locale);
        
$serverName = 'MyServer';
$database = 'Test';
$connectionInfo = array('Database'=>'Test', 'UID'=>$uid, 'PWD'=>$pwd);
$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 to create a test table
//   
$stmt = sqlsrv_query($conn, "CREATE TABLE [Table1] ([c1_int] int, [c2_varchar] varchar(512))");

// Insert data using a parameter array 
//
$tsql = "INSERT INTO [Table1] (c1_int, c2_varchar) VALUES (?, ?)";
  
// Execute the query, $value being some ASCII string
//   
$stmt = sqlsrv_query($conn, $tsql, array(1, array($value, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR))));
  
if ($stmt === false) {
    echo "Error in statement execution.<br>";  
    die(print_r(sqlsrv_errors(), true));  
}  
else {  
    echo "The insertion was successfully executed.<br>";  
}  
  
// Retrieve the newly inserted data
//   
$stmt = sqlsrv_query($conn, "SELECT * FROM Table1");
$outValue = null;  
if ($stmt === false) {  
    echo "Error in statement execution.<br>";  
    die(print_r(sqlsrv_errors(), true));  
}  
  
// Retrieve and display the data
//   
if (sqlsrv_fetch($stmt)) {  
    $outValue = sqlsrv_get_field($stmt, 1, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR));
    echo "Value: " . $outValue . "<br>";
    if ($value !== $outValue) {
        echo "Data retrieved, \'$outValue\', is unexpected!<br>";
    }
}  
else {  
    echo "Error in fetching data.<br>";  
    die(print_r(sqlsrv_errors(), true));  
}  

// Free statement and connection resources
//   
sqlsrv_free_stmt($stmt);  
sqlsrv_close($conn);  
?>  
<?php  
  
// PDO_SQLSRV Example:
//
// Setting locale for the script is only necessary if Latin 1 is not the default 
// in the environment
$locale = strtoupper(PHP_OS) === 'LINUX' ? 'en_US.ISO-8859-1' : 'en_US.ISO8859-1';
setlocale(LC_ALL, $locale);
        
$serverName = 'MyServer';
$database = 'Test';

try {
    $conn = new PDO("sqlsrv:Server=$serverName;Database=$database;", $uid, $pwd);
    $conn->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_SYSTEM);
    
    // Set up the Transact-SQL query to create a test table
    //   
    $stmt = $conn->query("CREATE TABLE [Table1] ([c1_int] int, [c2_varchar] varchar(512))");
    
    // Insert data using parameters, $value being some ASCII string
    //
    $stmt = $conn->prepare("INSERT INTO [Table1] (c1_int, c2_varchar) VALUES (:var1, :var2)");
    $stmt->bindValue(1, 1);
    $stmt->bindParam(2, $value);
    $stmt->execute();
    
    // Retrieve and display the data
    //
    $stmt = $conn->query("SELECT * FROM [Table1]");
    $outValue = null;
    if ($row = $stmt->fetch()) {
        $outValue = $row[1];
        echo "Value: " . $outValue . "<br>";
        if ($value !== $outValue) {
            echo "Data retrieved, \'$outValue\', is unexpected!<br>";
        }
    }
} catch (PDOException $e) {
    echo $e->getMessage() . "<br>";
} finally {
    // Free statement and connection resources
    //
    unset($stmt);
    unset($conn);
}

?>  

Zie ook

Gegevens ophalen
Werken met UTF-8-gegevensGegevens Bijwerken (Microsoft-stuurprogramma's voor PHP voor SQL Server)
Naslaginformatie over de API voor SQLSRV-stuurprogramma's
Constanten (Microsoft-stuurprogramma's voor PHP voor SQL Server)
Voorbeeldtoepassing (SQLSRV-stuurprogramma)