0

In my database I have an entry CARIÑO when I select it in database I get CARIÃO showing when I inspect element in browser. When I try to save it again in database I get error saying:

SQLSTATE[HY000]: General error: 1366 Incorrect string value: '\xC2\x91O' for column I want to know how to fix this error in a way that it will show CARIÑO in browser and be saved again as CARIÑO into database.

In my database connection I have:

$options = array(PDO::MYSQL_ATTR_INIT_COMMAND => 'mysql:charset=utf8mb4'); 
//Establishes the connection
$this->_connection = new PDO("sqlsrv:Server=IP;Server=$serverName,1433; Database=".DB_NAME."",DB_USER,DB_PASS,$options);

I used sample in stackoverflow.com/questions/279170/utf-8-all-the-way-through for using the mysql:charset=utf8mb4

And in my select I have:

while ($selected_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
     // $selected_row['column'] = $column;
     //echo $selected_row['patlast'];//this ouputs CARIÃO
     $rows1[] = array_map('utf8_encode', $selected_row);
     $rows[] =  array_map('utf8_encode', $selected_row);
}

The database I select from is ms sql server.

UPDATE:

After running from here:

mb_detect_encoding($selected_row['patlast'], mb_detect_order(), true) === 'UTF-8' ?  $content= $selected_row['patlast'] :  $content= mb_convert_encoding($selected_row['patlast'], 'UTF-8');
echo "patlast: ".$content; // i get patlast: CARIÑO
echo "mb_detect_encoding: ". mb_detect_encoding($selected_row['patlast'], mb_detect_order(), true);//i get mb_detect_encoding: UTF-8
Martin
  • 365
  • 4
  • 7
  • 22

1 Answers1

0

Changed :

$rows1[] = array_map('utf8_encode', $selected_row);
$rows[] =  array_map('utf8_encode', $selected_row);

To

$rows1[] = array_map(null, $selected_row);
$rows[] =  array_map(null, $selected_row);

Now gets the correct name CARIÑO

Martin
  • 365
  • 4
  • 7
  • 22