,我會很高興,如果有人幫我:)如何從Oracle XML格式使用PHP
我嘗試寫讀取Oracle數據庫查詢PHP的Web服務,結果顯示爲XML獲取數據。我花了幾天在尋找解決方案,但遺憾的是它沒有工作
下面是一些查詢我試了一下:
<?php
$db ="(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=xxxx)(PORT=1530))
)
(CONNECT_DATA=(SID=DEV))
)";
$c = oci_connect("uname", "pass", $db);
$q = "select dbms_xmlgen.getxml(
'select user_name
from fnd_user
where user_name = 007144') xml
from dual";
$s = oci_parse($c, $q);
oci_execute($s);
$r = oci_fetch_array($s, OCI_ASSOC);
$mylob = $r['XML']->load(); // Treat column data as a LOB descriptor
echo "<pre>";
echo htmlentities($mylob);
echo "</pre>";
?>
第二個代碼:
<?php
//File: DOM.php
$db="(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)
(HOST=xxx)(PORT=1530)
))
(CONNECT_DATA=(SID=DEV))
)";
$conn = OCILogon("uname","pass",$db);
if ($conn) {
//echo "Successfully connected to Oracle.";
} else {
$err = oci_error();
echo "Oracle Connect Error " . $err['text'];
}
$query = "SELECT user_name from fnd_user where user_name = '007144'";
$stmt = oci_parse($conn,$query);
if (!oci_execute($stmt, OCI_DEFAULT)) {
$err = oci_error($stmt);
trigger_error('Query failed: ' . $err['message'], E_USER_ERROR);
}
$dom = new DOMDocument('1.0', 'UTF-8');
$root = $dom->createElement('EMPLOYEES', 'Root');
$dom->appendChild($root);//$root = $dom->appendChild($root);
while ($row = oci_fetch_array($stmt, OCI_RETURN_NULLS))
{
$emp = $dom->createElement('EMPLOYEE', 'emp');
$emp = $root->appendChild($emp);
$emp->setAttribute('id', $row['user_name']);
/*
$emp = $dom->createElement('EMPLOYEE', '');
$emp = $root->appendChild($emp);
$emp->setAttribute('id', $row['user_name']);
$ename = $dom->createElement('ENAME', $row['user_name']);
$ename = $emp->appendChild($ename);
$salary = $dom->createElement('SALARY', $row['user_name']);
$salary = $emp->appendChild($salary);
*/
}
echo $dom->saveXML();
//$dom->save("employees.xml");
oci_close($conn);
?>
上面的代碼給我XML沒有數據如下圖所示! http://i48.tinypic.com/2lnv5eo.jpg
第三碼
<?php
//File: XMLFromSQL.php
$user = 'uname';
$pswd = 'pass';
$db ='(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=xxx)(PORT=1530))
)
(CONNECT_DATA=(SID=DEV))
)';
$sql = "SELECT user_name as RESULT FROM fnd_user
WHERE user_name=:deptno";
$deptno = 007144;
//Connect to the database and obtain info on a given department in XML format
$conn = oci_connect($user, $pswd, $db);
$query = oci_parse($conn, $sql);
oci_bind_by_name($query, ":deptno", $deptno, 2);
oci_execute($query);
oci_fetch($query);
$strXMLData = oci_result($query, 'RESULT');
//Create a new DOM document and load XML into its internal XML tree
$doc = new DOMDocument("1.0", "UTF-8");
$doc->loadXML($strXMLData);
//For simplicity, just print out the XML document
print $doc->saveXML();
?>
如果您有其他的方式,請幫助我,否則我會瘋:(
在第二個代碼,不應該'$ row ['user_name']'是'$ row ['USER_NAME']'而不是? http://php.net/manual/en/function.oci-fetch-array.php「Oracle的默認,非區分大小寫的列名將在結果數組中包含大寫關聯索引。」 – DazzaL
謝謝,它現在正在工作:) –