我想将数据从JSON文件导入数据库表。我正在使用带有pdo_sqlite驱动程序的Doctrine并配置以下实体:
/**
* @Entity @Table(name="mytable")
**/
class MyClass
{
/** @Id @Column(type="integer") @GeneratedValue *
* @Column(type="integer")
*/
var $id;
/** @Column(type="string") **/
var $name;
/** @Column(type="simple_array") **/
var $parameters;
function __construct($name, $parameters)
{
$this->name = $name;
$this->parameters = $parameters;
}
// getters and setters here
}
我创建了一个简单的导入方法:
function importFromJson($tableName, $fileName)
{
if (file_exists($fileName)) {
$data = json_decode(file_get_contents($fileName));
if (is_array($data)) {
$connection = getEm()->getConnection();
foreach($data as $tuple) {
if (is_object($tuple)) {
$connection->insert($tableName, (array)$tuple);
}
}
}
}
}
我的import.json文件包含以下文本:
[
{
"name": "A name",
"parameters": ["a","b","c"]
}
]
当我调用我的导入方法时:
importFromJson("mytable", "import.json");
我收到以下错误:
执行'INSERT INTO mytable时发生异常 (名称,参数)VALUES(?,?)' 用params [“A name”,[“a”,“b”,“c”]]:
数组到字符串转换 C:\ MyProject的\厂商\教义\ DBAL \ lib中\学说\ DBAL \ DBALException.php:119 C:\ MyProject的\供应商\原则\ DBAL \ LIB \原则\ DBAL \ Connection.php:996 C:\ MyProject的\供应商\原则\ DBAL \ LIB \原则\ DBAL \ Connection.php:696 C:\ MyProject的\ lib中\ import.php:39
simple_array类型的确切目的不是将数组转换为可以存储在数据库中的字符串吗?
答案 0 :(得分:-1)
我不知道为什么你必须像数组一样在数据库中存储params但是一个简单的方法来存储它,你应该将parameters
转换为有效的字符串,否则它不能正确存储
foreach($data as $tuple) {
if (is_object($tuple)) {
$touple = implode(",", (array)$touple);
$connection->insert($tableName, (array)$tuple);
}
}
另一种选择可能是将其转换为json字符串
foreach($data as $tuple) {
if (is_object($tuple)) {
$touple = json_encode($touple);
$connection->insert($tableName, (array)$tuple);
}
}
为了能够在使用select
时使用数据,您应该再次使用explode()
或json_encode
将数据转换回数组。希望这个! :)