-1

次のエラー:

「警告: oci_execute() [function.oci-execute]: ORA-00911: 69 行目の F:\wamp\www\SEarch Engine\test1.php に無効な文字があります」

このコードによって生成されています:

<?php
include_once('config.php');
$db = oci_new_connect(ORAUSER,ORAPASS,"localhost/XE");

$url_name = $_POST['textfield'];
$keyword_name = $_POST['textarea'];
$url_type = $_POST['RadioGroup1'];
$anchor_text = $_POST['textfield2'];
$description = $_POST['textarea2'];   

$sql = "select seq_url1.nextval seq_url1 from dual"; 
$result = oci_parse($db,$sql);

oci_execute($result);   
if($result) 
{
    while($row = oci_fetch_array($result))
    {   
        $temp = $row['SEQ_URL1'];
        echo $temp;
    }
}           

$sql_url1 = 'INSERT INTO URL1(Url_ID,Url_Name,url_Type,Anchor_Text,Dscription) '.'VALUES($temp,:url,:type,:anchor,:description)';

$compiled = oci_parse($db, $sql_url1);

oci_bind_by_name($compiled, ':url', $url_name);
oci_bind_by_name($compiled, ':type', $url_Type);
oci_bind_by_name($compiled, ':anchor', $anchor_text);
oci_bind_by_name($compiled, ':description', $description);

oci_execute($compiled);
?>

何が原因でしょうか?

4

4 に答える 4

3

これは、「説明」のスペルミスが原因である可能性があります。

$sql_url1='INSERT INTO URL1(Url_ID,Url_Name,url_Type,Anchor_Text,Dscription)...
                                                                  ^ here
于 2010-01-26T16:18:48.850 に答える
1

これ:

$sql_url1 = 'INSERT INTO URL1
                (Url_ID,Url_Name,url_Type,Anchor_Text,Dscription)'.'
             VALUES
                ($temp,:url,:type,:anchor,:description)';

...次のようにする必要があります。

$sql_url1 = 'INSERT INTO URL1
                (Url_ID,Url_Name,url_Type,Anchor_Text,Dscription)'.'
             VALUES
                (seq_url1.NEXTVAL,:url,:type,:anchor,:description)';

操作を実行するために 2 つのクエリは必要ありません。INSERT ステートメント内で sequence.NEXTVAL を呼び出すだけです。取得したものを使用する唯一の理由は、そのシーケンス値を他のレコードに再利用する場合です。

また、Dscription実際の列名と一致しないタイプミスである可能性もあります。を使用して確認しDESCRIBE URL1ます。そして、実行する前にクエリを印刷してみることができます:

oci_bind_by_name($compiled, ':url', $url_name);
oci_bind_by_name($compiled, ':type', $url_Type);
oci_bind_by_name($compiled, ':anchor', $anchor_text);
oci_bind_by_name($compiled, ':description', $description);

echo $sql_url1
于 2010-01-26T16:42:14.473 に答える
0

クエリにあまり使用されていない PHP 変数があります。

$sql_url1 = 'INSERT INTO URL1(Url_ID,Url_Name,url_Type,Anchor_Text,Dscription) VALUES($temp,:url,:type,:anchor,:description)';

ここでは、$temp は単に整数をダンプすることを意図していますが、文字列は単一引用符を使用しているため、置換は行われず、oracle は "$temp" を認識します (これはそのコンテキストでは無効です)。二重引用符に切り替えます。

$sql_url1 = "INSERT INTO URL1(Url_ID,Url_Name,url_Type,Anchor_Text,Dscription) VALUES($temp,:url,:type,:anchor,:description)";

または、上記の提案を使用してseq_url1.nextval. 説明のスペルが間違っていますが、無効な文字エラーではなく、不明な列エラーがスローされます。

ありがとう、ジョー

于 2010-01-26T18:34:38.770 に答える
0

私の推測では、Web フォームのエンコーディングと、Oracle データベースや接続のエンコーディングが一致していません。mySQL は壊れた文字をテーブルに適切に書き込みます - おそらく Oracle はより厳密です。

しかし、まず最初に、George Johnston や John Rasch の観察が正しくないかどうかを確認し、確認するデバッグ データを提供してください。

于 2010-01-26T16:21:11.740 に答える