0

我正在尝试从 UTF-8 编码的 MySQL 行表中进行简单提取并从中创建节点。它工作得很好,直到它遇到“Country House Café”名称的条目。

我正在为 REST API 使用 neo4jphp 包装器库。

我使用基本的 PDO 选择拉行:

 $results = $db->query("SELECT * FROM table WHERE name is not null");  
 $rows = $results->fetchAll(PDO::FETCH_ASSOC);

然后我遍历行:

foreach($rows as $row){
    try {
       $node = $client->makeNode($row);
       $node->save();
    } catch (Exception $e) {
         var_dump($row); exit;
    }
}

它愉快地迭代创建和保存节点,直到找到属性“name”是字符串“Country House Café”的节点。这会触发一个看起来像这样的异常

 Headers: Array
 (
     [Content-Type] =>  application/json; charset=UTF-8; stream=true
     [Access-Control-Allow-Origin] =>  *
     [Transfer-Encoding] =>  chunked
     [Server] =>  Jetty(9.0.5.v20130815)
 )
 Body: Array
 (
     [message] => Could not set property "name", unsupported type: null
     [exception] => PropertyValueException
     [fullname] => org.neo4j.server.rest.web.PropertyValueException
     [stacktrace] => Array
            (
                [0] => org.neo4j.server.rest.domain.PropertySettingStrategy.setProperty(PropertySettingStrategy.java:141)
                [1] => org.neo4j.server.rest.domain.PropertySettingStrategy.setProperties(PropertySettingStrategy.java:88)
                [2] => org.neo4j.server.rest.web.DatabaseActions.createNode(DatabaseActions.java:214)
                [3] => org.neo4j.server.rest.web.RestfulGraphDatabase.createNode(RestfulGraphDatabase.java:238)
                [4] => java.lang.reflect.Method.invoke(Method.java:483)
                [5] => org.neo4j.server.rest.transactional.TransactionalRequestDispatcher.dispatch(TransactionalRequestDispatcher.java:139)
                [6] => org.neo4j.server.rest.security.SecurityFilter.doFilter(SecurityFilter.java:112)
                [7] => java.lang.Thread.run(Thread.java:745)
            )

    )

现在,如果我在 PHP 中手动执行类似这样的操作,一切正常:

$node = $client->makeNode(array("name" => "Country House Café"));
$node->save();

任何人都知道这里的罪魁祸首是什么?

4

1 回答 1

1

好吧,我脸上的鸡蛋 - 想通了,这实际上是我使用 PDO。

我现在完全知道 PDO 不会默认编码为您的数据库、表或只是 UTF8 的编码。我仍然不确定它在哪里选择默认编码,也没有进一步调查的冲动。

我原来的 DSN 是

   $dsn = "mysql:host=$hostname;dbname=$database";
   $db = new \PDO($dsn, $username, $password);

我将其更改为添加数据库。

  $dsn = "mysql:host=$hostname;dbname=$database;charset=utf8";   

宾果游戏,魔术。

于 2014-07-21T15:15:33.730 回答