2012-01-14 15 views
4

浮動小数点数をOCI文にバインドする必要があります。私がやっている何php oci_bind_by_name浮動小数点数を

$price = 0.1 
oci_bind_by_name($resource, 'price', $price); 

を私のオラクルDB「価格」には、ストアドプロシージャの引数で、それのタイプは数値です。 $価格が整数すべてが正常に動作している

Message: oci_execute() [function.oci-execute]: ORA-06502: PL/SQL: numeric or value error: character to number conversion error ORA-06512: at line 1

場合:

私の文を実行した後、私は次のエラーを取得しています。 PHP docs http://lv.php.net/manual/en/function.oci-bind-by-name.php 5番目のパラメータ(int $ type = SQLT_CHR)にfloatの特殊な型が見つかりませんでした。

回答あり 私のOSの小数点記号を "、"から "。"に変更しました。今すぐすべて正常に動作します

答えて

-1

試してみてください: oci_bind_by_name($resource, 'price', $price, -1, SQLT_NUM); SQLT_NUMは、ドキュメントから欠落しています。

0

OSの小数点記号を変更できない場合(または単純にしたくない場合)、この問題の唯一の解決策は浮動小数点パラメータを避けることです。 この値をSQLに直接入力する必要があります。 正しい小数点記号のロケールとしてen_USを使用することにも注意する必要があります。

// Ensure that the period is used as decimal separator when converting float to string 
setlocale(LC_ALL, 'en_US'); 

// Generate SQL 
// ... 
$variables = array(); 
if(is_int($myValue)) 
{ 
    $sql .= ':MYVALUE'; 
    $variables[':MYVALUE'] = $myValue; 
} 
else if(is_float($myValue)) 
{ 
    $sql .= (string) $myValue; 
} 
// ... 

// Generate statement 
// $resource = oci_parse(...); 

// Bind parameters (if neccessary) 
if(count($variables) > 0) 
{ 
    foreach($variables as $name => &$variable) 
     oci_bind_by_name($resource, $name, $variable); 
} 
関連する問題