Bagikan melalui


Cara: Mengirim dan Mengambil Data ASCII di Linux dan macOS

Unduh driver PHP

Artikel ini mengasumsikan lokal ASCII (non-UTF-8) telah dibuat atau diinstal di sistem Linux atau macOS Anda.

Untuk mengirim atau mengambil kumpulan karakter ASCII ke server:

  1. Jika lokal yang diinginkan bukan default di lingkungan sistem Anda, pastikan Anda memanggil setlocale(LC_ALL, $locale) sebelum membuat koneksi pertama. Fungsi PHP setlocale() mengubah lokal hanya untuk skrip saat ini, dan jika dipanggil setelah membuat koneksi pertama, mungkin diabaikan.

  2. Saat menggunakan driver SQLSRV, Anda dapat menentukan 'CharacterSet' => SQLSRV_ENC_CHAR sebagai opsi koneksi, tetapi langkah ini bersifat opsional karena ini adalah pengodean default.

  3. Saat menggunakan driver PDO_SQLSRV, ada dua cara. Pertama, saat membuat koneksi, atur PDO::SQLSRV_ATTR_ENCODING ke PDO::SQLSRV_ENCODING_SYSTEM (untuk contoh pengaturan opsi koneksi, lihat PDO::__construct). Atau, setelah berhasil tersambung, tambahkan baris ini $conn->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_SYSTEM);

Saat Anda menentukan pengodean sumber daya koneksi (dalam SQLSRV) atau objek koneksi (PDO_SQLSRV), driver mengasumsikan bahwa string opsi koneksi lainnya menggunakan pengodean yang sama. Nama server dan string kueri juga diasumsikan untuk menggunakan kumpulan karakter yang sama.

Pengodean default untuk driver PDO_SQLSRV adalah UTF-8 (PDO::SQLSRV_ENCODING_UTF8), tidak seperti driver SQLSRV. Untuk informasi selengkapnya tentang konstanta ini, lihat Konstanta (Driver Microsoft untuk PHP untuk SQL Server).

Contoh

Contoh berikut menunjukkan cara mengirim dan mengambil data ASCII menggunakan Driver PHP untuk SQL Server dengan menentukan lokal tertentu sebelum membuat koneksi. Lokal di berbagai platform Linux dapat diberi nama yang berbeda dari lokal yang sama di macOS. Misalnya, lokal ISO-8859-1 (Latin 1) AS ada en_US.ISO-8859-1 di Linux sementara di macOS namanya adalah en_US.ISO8859-1.

Contoh mengasumsikan bahwa SQL Server diinstal pada server. Semua output ditulis ke browser ketika contoh dijalankan dari browser.

<?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);
}

?>  

Lihat Juga

Mengambil Data
Bekerja dengan Data Pembaruan DataUTF-8 (Driver Microsoft untuk PHP untuk SQL Server)
Referensi API Driver SQLSRV
Konstanta (Driver Microsoft untuk PHP untuk SQL Server)
Contoh Aplikasi (Driver SQLSRV)