ms sql und unicode

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • ms sql und unicode

    Hallo Ihr,

    in diversen Foren habe ich Beiträge zu meinem Thema gefunden, allerdings hatte nie jemand eine Lösung parat. Daher zähle ich nun auf Euch!

    Ich möchte Unicode in eine MS SQL DB speichern, da das System später auch mit koreanischen Inhalten laufen soll.

    Folgender Code zum Testen:
    PHP-Code:
    <?php
    include(dirname(__FILE__)."/include.php");
    echo 
    "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">
    <html>
    <head>
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">
    </head>
    <body>
    "
    ;

    // variablen des Formulars holen
    if(isset($_POST['form'])) $form=$_POST['form'];
    else 
    $form="";
    if(isset(
    $_POST['users_Lastname'])) $users_Lastname=$_POST['users_Lastname'];
    else 
    $users_Lastname="";

    // datenbank öffnen
    $db=array();
    $db["host"]="localhost"// 10.1.7.107
    $db["port"]="1433";
    $db["db"]="PLS";
    $db["user"]="root";
    $db["pw"]="root";
    $db["typ"]="mssql";
    $db["via"]="direct";
    $db["commit"]=1;

      
    // Verbindung zum Server erfolgreich?
      
    if(!($db["link"] = mssql_connect($db["host"], $db["user"], $db["pw"])))
      {
        echo 
    "Konnte nicht zum Server ".$db["host"]." verbinden";
        exit;
      }

      
    // Datenbank auswählen
      
    $result mssql_select_db($db["db"], $db["link"]);
      if(!
    $result// Datenbank konnte nicht ausgewählt werden
      
    {
        echo
    "Konnte nicht zur Datenbank ".$db["db"]." verbinden";
        exit;
      }

    if(
    $form!=""// formular wurde abgesendet
    {
      
    $users_Lastname=mb_convert_encoding($users_Lastname"UCS-2""UTF-8"); // (1)
      
    $table="T_USER";
      
    $insert="(Lastname) VALUES('$users_Lastname')";
      
    $result="";
      
    $query="INSERT $table $insert";
      
    $db_result mssql_query($query$db["link"]); // (2)
    echo "db_result nach INSERT: $db_result";
    }

    // Alle Datensätze wieder auslesen, zur Kontrolle
    $query="SELECT * FROM T_User";
    $db_result mssql_query($query$db["link"]);
    while(
    $row=mssql_fetch_array($db_result))
    {
      
    $new=mb_convert_encoding($row["Lastname"], "UTF-8""UCS-2");
      echo 
    $row["Lastname"]." - $new <br>";
    }

    echo
    "
    <form action=\"
    $PHP_SELF\" method=\"POST\">
    <input type=\"hidden\" name=\"form\" value=\"users\" >
    <input type=\"text\" name=\"users_Lastname\" value=\"\" size=\"32\" maxlength=\"256\" >
    <a href=\"#\" onClick=\"document.forms[0].submit();\">speichern</a>
    </form>
    </body>
    </html>
    "
    ;

    ?>
    Das Datenbankfeld Lastname ist vom Typ NVARCHAR und braucht als Input UCS-2 (laut anderen Forenbeiträgen). Aber nach der Konvertierung bei (1) und dem ausführen bei (2) bekomme ich folgenden Fehler:


    Warning: mssql_query(): message: Unclosed quotation mark before the character string ''. (severity 15) in c:\inetpub\wwwroot\pls\test.php on line 52

    Warning: mssql_query(): message: Line 1: Incorrect syntax near ''. (severity 15) in c:\inetpub\wwwroot\pls\test.php on line 52

    Warning: mssql_query(): Query failed in c:\inetpub\wwwroot\pls\test.php on line 52
    Ich hoffe jemand kann mir helfen. Ich hab in der php.ini übrigens mbstring.func_overload=7 eingestellt.

    Es ist eigentlich egal, was man in das Formularfeld einträgt, ob Sonderzeichen oder nicht. Er machts einfach nicht. Stelle ich die Konvertierung bei (1) aus, so trägt er es brav ein. Aber dann speichere ich UTF-8 in ein UCS-2 Feld und das will ich eigentlich nicht.

    Wer (1) mal auskommentiert wird sehen, dass die Inhalte auch wieder korrekt aus der DB herauskommen... aber ich weiß nicht, wie sich das dann bei koreanischen Schriftzeichen verhält!

    Auf Hilfe hoffend

    Gruß
    Thorsten

  • #2
    umweg über COM

    Hallo Ihr,

    nach 5 Tage Recherche im Netz hat es meine Kollegin gefunden:

    UCS-2 und PHP mögen sich wohl nicht so gern, daher muß ein Umweg auf dem Weg zur Datenbank eingeschlagen werden. Die MS SQL Datenbank muß über die COM Schnittstelle von PHP angesprochen werden. Näheres, sowie ein Beispielzugriff findet man in der PHP-Doku unter:

    http://de3.php.net/manual/en/ref.com.php

    Viel Spaß beim Zugriff!
    Achja... ich hab es nicht geschafft den Verbindungsaufbau und das Auslesen aus der DB in 2 verschiedene Funktionen zu packen (was praktisch wäre). Wenn das jemand geschafft hat, bitte Bescheid sagen.

    DANKE!

    Gruß
    Thorsten

    Kommentar

    Lädt...
    X