Msphpsql: XML parsing: illegal xml character when inserting with XML

Created on 14 Nov 2016  路  3Comments  路  Source: microsoft/msphpsql

It seems that when passing an XML string through as a parameter to a column defined as "XML" an "illegal XML character" error is returned by PDO.

SQL Version: Microsoft SQL Server 2014 (SP2) (KB3171021) - 12.0.5000.0 (X64)
PHP: 7.0.8-0ubuntu0.16.04.2

Using pdo_sqlsrv-4.0.6 from PECL libraries.

DB Structure:

CREATE TABLE TestTable
(
  ID INT PRIMARY KEY NOT NULL IDENTITY,
  XMLMessage XML
);

PHP:

$xml = "<ParentXMLTag>
  <ChildTag01>TestValue01</ChildTag01>
  <ChildTag02>TestValue01</ChildTag02>
  <ChildTag03>TestValue01</ChildTag03>
  <ChildTag04>TestValue01</ChildTag04>
  <ChildTag05>TestValue01</ChildTag05>
  <ChildTag06>TestValue01</ChildTag06>
  <ChildTag07>TestValue01</ChildTag07>
  <ChildTag08>TestValue01</ChildTag08>
  <ChildTag09>TestValue01</ChildTag09>
  <ChildTag10>TestValue01</ChildTag10>
  <ChildTag11>TestValue01</ChildTag11>
  <ChildTag12>TestValue01</ChildTag12>
  <ChildTag13>TestValue01</ChildTag13>
  <ChildTag14>TestValue01</ChildTag14>
  <ChildTag15>TestValue01</ChildTag15>
  <ChildTag16>TestValue01</ChildTag16>
  <ChildTag17>TestValue01</ChildTag17>
  <ChildTag18>TestValue01</ChildTag18>
  <ChildTag19>TestValue01</ChildTag19>
  <ChildTag20>TestValue01</ChildTag20>
  <ChildTag21>TestValue01</ChildTag21>
  <ChildTag22>TestValue01</ChildTag22>
  <ChildTag23>TestValue01</ChildTag23>
  <ChildTag24>TestValue01</ChildTag24>
  <ChildTag25>TestValue01</ChildTag25>
  <ChildTag26>TestValue01</ChildTag26>
  <ChildTag27>TestValue01</ChildTag27>
  <ChildTag28>TestValue01</ChildTag28>
  <ChildTag29>TestValue01</ChildTag29>
  <ChildTag30>TestValue01</ChildTag30>
</ParentXMLTag>";

try {

    $conn = new PDO("sqlsrv:server=tcp:servername.corp,1433;Database=SchemaNameHere", "username", "password");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $conn->prepare("INSERT INTO TestTable (XMLMessage) VALUES (:msg)");
    $stmt->bindValue(':msg', $xml);

    $stmt->execute();

    echo "Success";
}
catch (PDOException $ex) {
    echo "Error: " . $ex->getMessage();
}

Results of above code:
Error: SQLSTATE[42000]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]XML parsing: line 32, character 16, illegal xml character

Linux PDO_SQLSRV bug

All 3 comments

Forgot to mention, when the XML set is smaller (only up to and including <ChildTag09>), the insert is works.

@parite We are working on this issue, stay tuned for the next release

@parite we have fixed this issue. Downlaod the latest PECL packages to get the fix

sudo pecl install sqlsrv-4.0.7
sudo pecl install pdo_sqlsrv-4.0.7
Was this page helpful?
0 / 5 - 0 ratings

Related issues

sirio3mil picture sirio3mil  路  6Comments

Grglrglrg picture Grglrglrg  路  4Comments

arunchandarQA picture arunchandarQA  路  3Comments

luizzz picture luizzz  路  5Comments

george-slastnoy picture george-slastnoy  路  5Comments