Avatar billede larsgrau Forsker
17. december 2020 - 21:03 Der er 13 kommentarer og
1 løsning

Data fra mssql til mysql

Hej

Jeg har følgende code

<?php
include 'conf/mssqlConnect.php';
include 'conf/mysqlConnect.php';

$sql = "Select * From COUNTRIES";

$stmt = sqlsrv_query($conn, $sql);

if( sqlsrv_fetch( $stmt ) === false) {
    die( print_r( sqlsrv_errors(), true));
}
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
      $code = $row['COUNTRY_CODE'];
      $Name = $row['NAME'];
      $sqlcountry = "INSERT INTO country (Code,Name) VALUES ('$code','$Name')";
    mysqli_query($myconn,$sqlcountry);
}
?>

Den virker fint, men den tager ikke alle liner med fra mssql og insert til mysql

Der 263 liner i mssql og i mysql er der 262, det er line 1 den ikke taget med over, nogen som kan give en god grund til det ?
Avatar billede arne_v Ekspert
17. december 2020 - 21:41 #1
mysqli_query($myconn,$sqlcountry);

->

mysqli_query($myconn,$sqlcountry) or die(mysqli_error($myconn));;
Avatar billede larsgrau Forsker
17. december 2020 - 22:14 #2
Den kommer med denne fejl

Incorrect string value: '\xC5land ...' for column 'Name' at row 1
Avatar billede arne_v Ekspert
17. december 2020 - 22:25 #3
Og det er det eneste navn med danske bogstaver?

Kan det være fordi at data er i ISO-8859-1/IsoLatin1/CP-1252 og data skal være i UTF-8?
Avatar billede larsgrau Forsker
17. december 2020 - 22:38 #4
MSSQL er i Latin1_general
Accent-sensitive
Width-sensitive

Min mysql er i latin1_general_ci
og det er mine tabler også
Avatar billede arne_v Ekspert
17. december 2020 - 22:54 #5
Hjælper en:

mysqli_set_charset ($myconn, 'latin1');

?
Avatar billede larsgrau Forsker
17. december 2020 - 23:04 #6
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Ivoire')' at line 1
Avatar billede larsgrau Forsker
17. december 2020 - 23:05 #7
<?php

include 'conf/mssqlConnect.php';
include 'conf/mysqlConnect.php';

$sql = "Select * From COUNTRIES";

$stmt = sqlsrv_query($conn, $sql);

if( sqlsrv_fetch( $stmt ) === false) {
    die( print_r( sqlsrv_errors(), true));
}

while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
      $code = $row['COUNTRY_CODE'];
      $Name = $row['NAME'];
     
    $sqlcountry = "INSERT INTO country (Code,Name) VALUES ('$code','$Name')";
   
   
   
    mysqli_query($myconn,$sqlcountry)or die(mysqli_error($myconn));

}

mysqli_set_charset($myconn,'latin1');

?>
Avatar billede larsgrau Forsker
17. december 2020 - 23:09 #8
De står som nvarchar i mssql har det noget at sige ?
Avatar billede arne_v Ekspert
17. december 2020 - 23:18 #9
mysqli_set_charset($myconn,'latin1');

skal op før loop med INSERT
Avatar billede arne_v Ekspert
17. december 2020 - 23:19 #10
Côte d'Ivoire

har en single quote.

Så du skal nok skifte til prepare og parametre!!
Avatar billede larsgrau Forsker
18. december 2020 - 08:41 #11
Det er forbi  der er ' i name, hvordan kommer jeg lige uden om det ?
Avatar billede arne_v Ekspert
18. december 2020 - 14:29 #12
Brug prepare og parameters.
Avatar billede larsgrau Forsker
03. januar 2021 - 22:20 #13
<?php

include 'conf/mssqlConnect.php';
include 'conf/mysqlConnect.php';

$sql = "Select * From COUNTRIES";

$stmt = $conn->query($sqlNorthSeaLocation); 
while($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    $Name = $row['code'];
    $latitude = $row['name'];
   
    $new_name = str_replace("'", "''", "$Name");

    $sqlcountry = "INSERT INTO sei_site (name,code) VALUES ('" . $new_name . "','" . $code . "'')";
    mysqli_query($myconn,$sqlcountry) or die(mysqli_error($myconn));
}

Det virker som det skal
Avatar billede arne_v Ekspert
04. januar 2021 - 01:47 #14
str_replace for at fordoble single quotes svarer til at montere sin kofanger med gaffa tape.

Prepare og parameters er den rigtige loesning.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester