2015-10-21 5 views
5

Ich versuche neue JSON-Datentyp auf MySQL 5.7. Wenn ich nativen PHP-MySQL-Abfrage verwenden, es funktioniert gut, aber wenn ich PDO verwenden, um Daten abzufragen, zeigt es diesen Fehler:PHP PDO Abfrage Fehler auf Tabelle hat JSON Datentyp (MySQL 5.7.8-rc)

Error: exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2036 ' in /some_folder/pdo.php:12 Stack trace: #0 /some_folder/pdo.php(12): PDO->query('select * from table_has_json_datatype') #1 {main}

Haben Sie Jungs wissen, wie dieses Problem zu lösen?

Danke.

-Update mit meinem einfachen Testcode:

<?php 

try{ 
    $db = new PDO('mysql:host=some.host;dbname=somedb;charset=utf8', 'user', 'pwd'); 
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
    $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 
}catch(PDOException $e){ 
    echo "Error1: ".$e; 
} 

try{ 
    $query = $db->query("select * from table_with_json_type"); 

}catch(PDOException $e){ 
    echo "Error2: ".$e; 
} 
?> 
+0

Können Sie Ihren Beitrag mit dem Code –

+0

'Fehler bearbeiten: 2036 (CR_UNSUPPORTED_PARAM_TYPE)' - so der eigentliche Code ist wahrscheinlich irrelevant. – VolkerK

+0

'a)' Was bedeutet 'echo 'CLIENT_VERSION:"', $ pdo-> getAttribute (PDO :: ATTR_CLIENT_VERSION), '"';' drucken? (Wo $ pdo ist Ihre acual PDO-Instanz erstellt werden 'neue PDO ...') 'b)' Welche Version von PHP laufen Sie genau, was OS (zB PHP 5.4.7/Ubuntu 11.04) – VolkerK

Antwort

9

Es ist ein Bug zu PHP-Entwickler berichtet #70384

Der Entwickler [email protected] gerade geschrieben:

The fix for this bug has been committed.

Snapshots of the sources are packaged every three hours; this change will be in the next snapshot. You can grab the snapshot at http://snaps.php.net/ .

For Windows:

http://windows.php.net/snapshots/ Thank you for the report, and for helping us make PHP better.

Fixed in PHP-5.6.19, PHP-7.0 and master (PHP-7.1)

Thank You for your report

Also, die JSON-Datentyp wird auf PHP 5.6.19+ unterstützt. Für andere Version gibt es eine oben genannte Problemumgehung.

ändert Diese Problemumgehung das JSON-Feld mit CAST-Funktion zu einem CHAR, die von PHP Sicht in Ordnung ist: Eg .:

select *, CAST(json_col as CHAR) as json_col from table_with_json_type 

Es ist in allen Fällen zu mir gearbeitet hat.

Um die volle Kompatibilität Sie 5.5 PHP-5.6.19 +

+0

Danke für Ihre Antwort. Weißt du, wann die nächste Version veröffentlicht wird? –

+0

Casting funktionierte für mich, aber das Problem scheint nicht in PHP gelöst werden 5.6.19 –

+0

Getestet auf PHP 5.6.20 und es ist nicht notwendig, diese Problemumgehung zu verwenden, um Arbeiten zu machen. Die JSON-Daten werden als jsonstring ausgegeben. Wäre nett, einige Config zu haben, um es als stdClass – LeonanCarvalho

1

Ich hatte das gleiche Problem in PHP verwenden müssen - beschlossen, PHP 5.6 zu aktualisieren, aber das Problem existiert noch. Casting nach CHAR hilft, aber es ist keine gute Lösung.

Meine PHP-Konfiguration verwendete libmysqlclient und als ich es in mysqlnd (MySQL native Treiber) änderte löste es das Problem.

Also ich empfehle, das gleiche zu tun.

Sie können hier über PHP MySQL-Treiber lesen: http://php.net/manual/en/mysqlinfo.library.choosing.php

ich mysqlnd Treiber in Ubuntu Server mit apt-get installiert:

apt-get php5-mysqlnd

1

Als kleiner Nachtrag installieren . Wenn Sie die Spalte in ein entsprechendes Zeichen umwandeln, wird der Wert in doppelten Anführungszeichen zurückgegeben. Sie können sie loswerden trim mit:

select *, TRIM(BOTH '"' FROM CAST(json_col as CHAR)) as json_col from table_with_json_type