Heim  >  Artikel  >  Backend-Entwicklung  >  Der Grund, warum PHP die gespeicherte Oracle-Prozedur aufruft, ist, dass nicht alle Variablen gebunden sind.

Der Grund, warum PHP die gespeicherte Oracle-Prozedur aufruft, ist, dass nicht alle Variablen gebunden sind.

巴扎黑
巴扎黑Original
2016-11-08 11:46:511682Durchsuche

Heute habe ich festgestellt, dass ein solcher Fehler immer auftritt, wenn gespeicherte Oracle-Prozeduren mit PHP aufgerufen werden.

ORA-01008: nicht alle Variablen gebunden

Nach langem Ringen stellte ich fest, dass der Variablenname falsch geschrieben war.

<?php
$conn = oci_connect(&#39;SCOTT&#39;,&#39;TIGER&#39;) or die;// 建立连接 
if (!$conn) { 
$e = oci_error(); 
print htmlentities($e[&#39;message&#39;]); 
exit; 
} 
$sql = &#39;BEGIN pack_gt_calc.Pro_gt_Confirm(:year, :week, :errno, :errmsg); END;&#39;; // 查询语句 
$stid = oci_parse($conn, $sql); // 配置SQL语句,准备执行 
if (!$stid) { 
$e = oci_error($conn); 
print htmlentities($e[&#39;message&#39;]); 
exit; 
}
//  Bind the input parameter
oci_bind_by_name($stid,&#39;:year&#39;,$year,32);
// Bind the input parameter
oci_bind_by_name($stid,&#39;:week&#39;,$week,32);
// Bind the output parameter
oci_bind_by_name($stid,&#39;:errno&#39;,$error,32);
// Bind the output parameter,变量名 ermsg 写错了
oci_bind_by_name($stid,&#39;:ermsg&#39;,$errmsg,64);
// Assign a value to the input 
$year = &#39;2016&#39;;
$week = &#39;4&#39;;
$r = oci_execute($stid); // 执行SQL。OCI_DEFAULT表示不要自动commit 
if(!$r) { 
$e = oci_error($stid); 
echo htmlentities($e[&#39;message&#39;]); 
exit; 
} 
echo "errmsg is : $error<br>";
echo "errmsg is : $errmsg<br>";
oci_close($conn); 
?>


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn