PHP kullanarak Oracle veritabanına veri ekleme ile sorun [kapalı]

4 Cevap php

Aşağıdaki hata:

"Warning: oci_execute() [function.oci-execute]: ORA-00911: invalid character in F:\wamp\www\SEarch Engine\test1.php on line 69"

Bu kod tarafından oluşturulan ediliyor:

<?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);
?>

Bu neden olabilir?

4 Cevap

Bu "Açıklama" bir yazım hatası neden olabilir:

$sql_url1='INSERT INTO URL1(Url_ID,Url_Name,url_Type,Anchor_Text,Dscription)...
                                                                  ^ here

Bu:

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

Olmalı ...:

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

Sadece INSERT deyim içinde sequence.NEXTVAL diyoruz, işlemi gerçekleştirmek için iki sorgu gerekmez. Diğer kayıtlar için bu sıra değerini yeniden kullanıyorsanız eğer ne var kullanmak için tek nedeni vardır.

Ayrıca, Dscription gerçek sütun adı eşleşmiyor bir yazım hatası olduğunu mümkündür. Ile onaylayın DESCRIBE URL1. Ve sen önce onu çalıştırmak olmanın sorgu yazdırmayı deneyebilirsiniz:

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

Benim tahminim eğitimli web form kodlama ve Oracle veritabanı ve / veya bağlantı kodlama uyuşmuyor olmasıdır. mySQL incelikle tabloya kırık karakteri yazacaktır - belki Oracle daha katıdır.

Ama önce George Johnston veya John Rasch gözlemleri doğru para değil zaten olup olmadığını kontrol edin ve bakmak için bazı hata ayıklama veri bize sağlayabilir.

Sen sorguda kötü kullanılan PHP değişkeni var.

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

Burada, $ temp sadece tamsayı dökümü amaçlanmıştır, ancak dize tek tırnak kullanır beri hiçbir ikame yer alır ve kehanet (bu bağlamda geçerli değildir) "$ temp" görür. Çift tırnak geçin:

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

Ya da yukarıdaki öneri almak ve kullanmak seq_url1.nextval. Açıklama misspelt, ama bu geçersiz bir karakter hatası, bilinmeyen bir sütun hata değil atmak olacaktır.

Thanks, Joe