Вставьте китайские символы в сервер sql с помощью php sqlsrv_prepare - PullRequest
0 голосов
/ 13 декабря 2018



Я пытаюсь вставить HTML-код с китайскими символами в SQL Server с помощью функции php sqlsrv_prepare, но по неизвестной причине это не работает.

Это мой код:

$sqlInsertMail = "INSERT INTO EnvioCorreo2Temp (CorreoRemitente,CorreoDestinatario,ContenidoID,ContenidoMail,
AsuntoMail,CCOMail,Link,Orden,CuentaID,EnviadorCorreoID,TestigoID,Prioridad,EstatusID,FUA,Activo,Fecha_Lanzamiento)
VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";

$stmtDest = sqlsrv_query($conn, $dest_query);
if($stmtDest){ //This condition is for another query executed before for this "IF" clause
    $cont = 0;
    while($row = sqlsrv_fetch_array($stmtDest,SQLSRV_FETCH_ASSOC) ) {

        $param1 = 'emailaccount@email.com'; $param2 = $row['email']; $param3 = 0; $param4 = $cuerpoMail; $param5 = $companyName;
        $param6 = 'emailaccount@email.com'; $param7 = $enclnk; $param8 = 1; $param9 = $CuentaCorreoID['CuentaCorreoID']; 
        $param10 = 1; $param11 = 0; $param12 = mt_rand(1,1000); $param13 = 4; $param14 = $fdate2; $param15 = 1; $param16 = $date;

        $params = array(&$param1, &$param2, &$param3, &$param4, &$param5, &$param6, &$param7, &$param8, &$param9, &$param10, &$param11, &$param12, 
        &$param13, &$param14, &$param15, &$param16);

        try{
            if($stmtPrepared = sqlsrv_prepare($conexion, $sqlInsertMail, $params)){
                try{
                    sqlsrv_execute($stmtPrepared);
                }catch (Exception $e) {
                    $bandera = false;
                }

            }
        }catch (Exception $e) {
            $bandera = false;
        }
    }
}else{
    if( ($errors = sqlsrv_errors() ) != null) {
        $bandera = false;
    }
}

Этот код пытается вставить переменную с текстом, подобным этому:

如果您对本次调研有任何问题,请用以下邮箱联系我们:

Я пробовал следующее:

  1. Добавление N перед знаком вопросав параметре 4
  2. Добавление "CharacterSet" => "UTF-8" в параметрах соединения
  3. Добавление N '' в переменную следующим образом: $ mailText = 'N \' CHINESE TEXT\ '' и не работает

Но, в конце концов, я попытался использовать простое выполнение запроса к серверу sql:

$sqlInsert = "INSERT INTO cat_textocorreo (idTextos, idIdioma, textoCorreo) VALUES (4, 2000,N'".$mail."')";
$stmtCorreo = sqlsrv_query($conexion, $sqlInsert);
if($stmtCorreo){
    echo "YES";
}else{
    if( ($errors = sqlsrv_errors() ) != null) {
        foreach( $errors as $error ) {
            echo "SQLSTATE: ".$error[ 'SQLSTATE']."<br />";
            echo "code: ".$error[ 'code']."<br />";
            echo "message: ".$error[ 'message']."<br />";
        }
    }
}

И это невероятно работает.На самом деле я не понимаю, как это работает.Кто-нибудь из вас может мне помочь?

Примечание: поле моей базы данных находится в NVARCHAR

Мне нужно вставить эти китайские символы, потому что другая программа .NET прочитает этот текст для отправки электронного письма.И в моей базе данных сохраняются только такие символы: ¨å¯¹æœ¬æ¬¡è ° ƒç ”æœ ä ä» »ä½ • é — ®é ¢ ˜ï

...