我可以使用PHP與Oracle 11g數據庫進行通信。此代碼旨在供用戶上傳.xls或.csv文件。如果.xls,然後轉換爲.csv。如果.csv,繼續。之後,它需要csv並更新一個oracle數據庫。在過去,我使用了SQL注入,卻沒有意識到與之相關的安全缺點。所以,我開始學習使用PDO。不過,我很新。我設計的代碼(如下)得到這個錯誤:使用PHP調用成員函數prepare()在PDO中的非對象使用PHP
Fatal error: Call to a member function prepare() on a non-object in /opt/apache/servers/planninganddesign/htdocs/JointUse/update_handler.php on line 89
89行被標記在下面。
代碼:
<?php
require_once('Classes/PHPExcel/IOFactory.php');
require_once("mcl_Oci.php");
?>
<br>
<?php
$filename = $_FILES['uploaded']['name'];
$file = $_FILES['uploaded']['tmp_name'];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if($ext='xls') {
$inputFileType = 'Excel5';
$inputFileName = $file;
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcelReader = $objReader->load($inputFileName);
$loadedSheetNames = $objPHPExcelReader->getSheetNames();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcelReader, 'CSV');
foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
$objWriter->setSheetIndex($sheetIndex);
$objWriter->save('abc.csv');}
$files = fopen('abc.csv', 'r');
if($files) {
while (($line = fgetcsv($files)) !== FALSE) {
$csv_array[] = array_combine(range(1, count($line)), array_values($line));
} echo 'Your .xls file was uploaded successfully. Have a nice day.';
}
elseif ($ext='csv'){
while (($line = fgetcsv($files)) !== FALSE) {
$csv_array[] = array_combine(range(1, count($line)), array_values($line));
} echo 'Your .csv file was uploaded successfully. Have a nice day.';
}
else {
echo "This is not an accepted file type. Please save as either '*.csv' or '*.xls' and re-upload.";
}
}
$ArrayNumber = 0;
while ($csv_array["$ArrayNumber"] != NULL) {
$ArrayNumber = $ArrayNumber + 1;
$RECEIVED=$csv_array["$ArrayNumber"]["1"];
$REGION=$csv_array["$ArrayNumber"]["2"];
$PERMIT=$csv_array["$ArrayNumber"]["3"];
$CUSTOMER=$csv_array["$ArrayNumber"]["4"];
$TO_BUSINESS=$csv_array["$ArrayNumber"]["5"];
$TO_PERMIT=$csv_array["$ArrayNumber"]["6"];
$POWER_ADDRESS=$csv_array["$ArrayNumber"]["7"];
$COMPANY=$csv_array["$ArrayNumber"]["8"];
$MAP_SECTION = $csv_array["$ArrayNumber"]["9"];
$POLES = $csv_array["$ArrayNumber"]["10"];
$FEE = $csv_array["$ArrayNumber"]["11"];
$INVOICE = $csv_array["$ArrayNumber"]["12"];
$DATE_LARRY = $csv_array["$ArrayNumber"]["13"];
$DAYS_LARRY = $csv_array["$ArrayNumber"]["14"];
$PI_PON = $csv_array["$ArrayNumber"]["15"];
$DATE_PD = $csv_array["$ArrayNumber"]["16"];
$DATE_LARRY_PD = $csv_array["$ArrayNumber"]["17"];
$RETURNED = $csv_array["$ArrayNumber"]["18"];
$DAYS_PD = $csv_array["$ArrayNumber"]["19"];
$ERRORS_PD = $csv_array["$ArrayNumber"]["20"];
$ERRORS_MULTIPLE = $csv_array["$ArrayNumber"]["21"];
$DATE_MAKEREADY_JU = $csv_array["$ArrayNumber"]["22"];
$DATE_MAKEREADY_COMPLETE = $csv_array["$ArrayNumber"]["23"];
$DAYS_MAKEREADY = $csv_array["$ArrayNumber"]["24"];
$DAYS_JU_PROCES = $csv_array["$ArrayNumber"]["25"];
$APPROVAL = $csv_array["$ArrayNumber"]["26"];
$DAYS_PERMIT_IN_JU = $csv_array["$ArrayNumber"]["27"];
$DATE_PLANNING = $csv_array["$ArrayNumber"]["28"];
$DAYS_OPEN = $csv_array["$ArrayNumber"]["29"];
$DATE_ROUTED = $csv_array["$ArrayNumber"]["30"];
$DAYS_TOTAL = $csv_array["$ArrayNumber"]["31"];
$COMMENTS = $csv_array["$ArrayNumber"]["32"];
$conn = oci_connect("user", "pass", "(description=(address=(protocol=tcp)(host=host)(port=1533))(connect_data=(service_name=name)))");
$sql = 'INSERT INTO INTOXDM.JOINT_USE (RECEIVED, REGION, PERMIT, CUSTOMER, TO_BUSINESS, TO_PERMIT, POWER_ADDRESS, COMPANY, MAPSECTION, POLES, FEE, INVOICE, DATE_LARRY, DAYS_LARRY, PI_PON, DATE_PD, DAYS_LARRY_PD, RETURNED, DAYS_PD, ERRORS_PD, ERRORS_MULTIPLE, DATE_MAKEREADY_JU, DATE_MAKEREADY_COMPLETE, DAYS_MAKEREADY, DAYS_JU_PROCES, APPROVAL, DAYS_PERMIT_IN_JU, DATE_PLANNING, DAYS_OPEN, DATE_ROUTED, DAYS_TOTAL, COMMENTS)
VALUES (:RECEIVED, :REGION, :PERMIT, :CUSTOMER, :TO_BUSIENSS, :TO_PERMIT, :POWER_ADDRESS, :COMPANY, :MAP_SECTION, :POLES, :FEE, :INVOICE, :DATE_LARRY, :DAYS_LARRY, :PI_PON, :DATE_PD, :DATE_LARRY_PD, :RETURNED, :DAYS_PD, :ERRORS_PD, :ERRORS_MULTIPLE,
:DATE_MAKEREADY_JU, :DATE_MAKEREADY_COMPLETE, :DAYS_MAKEREADY, :DAYS_JU_PROCES, :APPROVAL, :DAYS_PERMIT_IN_JU, :DATE_PLANNING, :DAYS_OPEN, :DATE_ROUTED, :DAYS_TOTAL, :COMMENTS)';
*****$stmt = $conn->prepare($sql);***** line 89
$sql->bindValue(':RECEIVED',$RECEIVED);
$sql->bindValue('REGION',$REGION);
$sql->bindValue(':PERMIT',$PERMIT);
$sql->bindValue(':TO_BUSINESS',$TO_BUSINESS);
$sql->bindValue(':TO_PERMIT',$TO_PERMIT);
$sql->bindValue(':POWER_ADDRESS',$POWER_ADDRESS);
$sql->bindValue(':MAP_SECTION',$MAP_SECTION);
$sql->bindValue(':POLES',$POLES);
$sql->bindValue(':FEE',$FEE);
$sql->bindValue(':INVOICE',$INVOCE);
$sql->bindValue(':$DATE_LARRY',$DATE_LARRY);
$sql->bindValue(':$DAYS_LARRY',$DAYS_LARRY);
$sql->bindValue(':$PI_PON',$PI_PON);
$sql->bindValue(':$DATE_PD',$DATE_PD);
$sql->bindValue(':$DATE_LARRY_PD',$DATE_LARRY_PD);
$sql->bindValue(':RETURNED',$RETURNED);
$sql->bindValue(':DAYS_PD',$DAYS_PD);
$sql->bindValue(':ERRORS_PD',$ERRORS_PD);
$sql->bindValue(':ERRORS_MULTIPLE',$ERRORS_MULTIPLE);
$sql->bindValue(':DATE_MAKEREADY_JU',$DATE_MAKEREADY_JU);
$sql->bindValue(':DATE_MAKEREADY_COMPLETE',$DATE_MAKEREADY_COMPLETE);
$sql->bindValue(':DAYS_MAKEREADY',$DAYS_MAKEREADY);
$sql->bindValue(':DAYS_JU_PROCES',$DAYS_JU_PROCES);
$sql->bindValue(':DATE_PERMIT_IN_JU',$DATE_PERMIT_IN_JU);
$sql->bindValue(':DATE_PLANNING',$DATE_PLANNING);
$sql->bindValue(':DAYS_OPEN',$DAYS_OPEN);
$sql->bindValue(':DATE_ROUTED',$DATE_ROUTED);
$sql->bindValue(':DAYS_TOTAL',$DAYS_TOTAL);
$sql->bindValue(':COMMENTS',$COMMENTS);
$stmt->execute();
$exec = execute();
}
?>
可能會導致什麼這個問題,是有它周圍的一個簡單的方法? TIA!
可能的重複[參考 - 這個錯誤在PHP中意味着什麼?](http://stackoverflow.com/questions/12769982/reference-what-does-this-error-mean-in-php/12769983#12769983 )。您不能將'oci_'函數與'PDO'函數混合使用。使用100%'oci'或100%PDO(使用['PDO_OCI'](http://php.net/manual/en/ref.pdo-oci.php))。 – h2ooooooo
在我看來,它看起來像'oci_connect'的調用失敗,'$ conn'沒有引用有效的連接。祝你好運。 –
@BobJarvis感謝您的幫助,但連接絕對成功。我有其他頁面使用完全相同的連接字符串從數據庫中提取數據。 –