pdo
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);
$stmt = $pdo->prepare('INSERT INTO soFoo (name, age) VALUES (:name, :age)');
$stmt->bindParam('name', $name);
$stmt->bindParam('age', $age);
$data = data();
// number of elements in $data['guest']
echo count($data['guest']), " new entries<br />\n";
// add data to mysql database
// iterate over elements in $data['guest']
foreach($data['guest'] as $row) {
// assign "values" to the previously bound parameters
$name = $row['name'];
$age = $row['age'];
// execute preapred statement
$stmt->execute();
}
$stmt = null;
// retrieve data: only count
// if you only want count the records do not transfer the data from the mysql server to your php process - use Count(*) instead
$row = $pdo->query('SELECT Count(*) from soFoo')->fetch();
echo $row[0], " entries in database<br />\n";
// retrieve data: actual data
$stmt = $pdo->query('SELECT name, age from soFoo', PDO::FETCH_ASSOC);
foreach($stmt as $row) {
echo $row['name'], ' ', $row['age'], "<br />\n";
}
// stmt->rowCount() after a SELECT statement doesn't work with all pdo drivers, but for PDO_MySQL it does
echo $stmt->rowCount(), ' records fetched';
// boilerplate: create temporary database structure ...
function setup($pdo) {
$pdo->exec('
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
name varchar(32),
age int,
primary key(id)
)
');
}
// boilerplate: a function returning example data to work on...
function data() {
return array (
'guest' => array (
array (
'name' => 'Joseph Needham',
'age' => 53
),
array (
'name' => 'Lu Gwei-djen',
'age' => 31
)
)
);
}
편집을 사용하여 자체 포함 된 예 : 당신이
<?php
$pdo = new PDO('mysql:host=localhost;dbname=test;charset=utf8', 'localonly', 'localonly');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
setup($pdo);
$stmt = $pdo->prepare('INSERT INTO soFoo (name, age) VALUES (:name, :age)');
$stmt->bindParam('name', $name);
$stmt->bindParam('age', $age);
// insert data
$data = data();
echo count($data->guest), " new entries<br />\n";
foreach($data->guest as $guest) {
$name = (string)$guest->name;
$age = (string)$guest->age;
$stmt->execute();
}
$stmt = null;
// retrieve data: only count
$row = $pdo->query('SELECT Count(*) from soFoo')->fetch();
echo $row[0], " entries in database<br />\n";
// retrieve data: actual data
$stmt = $pdo->query('SELECT name, age from soFoo', PDO::FETCH_ASSOC);
foreach($stmt as $row) {
echo $row['name'], ' ', $row['age'], "<br />\n";
}
echo $stmt->rowCount(), ' records fetched';
function setup($pdo) {
$pdo->exec('
CREATE TEMPORARY TABLE soFoo (
id int auto_increment,
name varchar(32),
age int,
primary key(id)
)
');
}
function data() {
// return simplexml_load_file('...');
return new SimpleXMLElement(<<< eox
<?xml version="1.0" encoding="utf-8"?>
<everyone>
<guest>
<name>Joseph Needham</name>
<age>53</age>
</guest>
<guest>
<name>Lu Gwei-djen</name>
<age>31</age>
</guest>
</everyone>
eox
);
}
출력처럼 뭔가를 할 수 귀하의 XML 제공은 동일합니다.
그러나 simplexml_load_file()은 전체 DOM을 메모리에 유지합니다. 데이터 소스가 커져서 문제가 될 수 있으며 XMLReadery으로 더 잘 전환하면
배열에 어떤 문제가 있습니까? 이 유형의 데이터를 저장하는 가장 좋은 방법입니다. PHP에서는 $ name 변수를 여러 개 가질 수 없습니다. 나중에 그 변수들로 무엇을하고 싶습니까? – Fluitketel
내 질문에 내 대답을 참조하십시오 @Rithu이 의 foreach ($ 행으로 $ arrXml) { } – Rithu
같은 PHP 변수에이 값을 저장하는 방법입니다. –