Birden fazla değişken eklemeleri gibi değil PHP dizeleri mi?

4 Cevap php

I Oracle Database 11.1 ile PHP 5.2 kullanıyorum.

Kod

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=$commentID");

Bu hata sonuçları:

Warning: oci_execute() [function.oci-execute]: ORA-00904: "COMMENTS": invalid identifier in C:\IODwww\hello.php on line 159
^

Ama bu çalışıyor çalışıyor:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=1");

Bu beni sorgu dizeye birden çok değişken enjekte veya diğer bazı hata mı yapıyorum bir sonucudur?

4 Cevap

Bir PHP dize birden değişkenler ile hiçbir sorun yoktur.

Sorun hata ayıklama için deneyebilirsiniz:

var_dump("SELECT * FROM COMMENTS WHERE PINID=$pinID and COMMENTID=$commentID");

çıktı gerçekten uyuyorsa ve bakın:

string(...) "SELECT * FROM COMMENTS WHERE PINID=1 and COMMENTID=1" 

Aklıma tek şey commentID boştur veya "\ n" veya hataya neden ona bağlı bir şey içerir olmasıdır.

Veritabanı söndürür errorcode, "girdiğiniz sütun adı eksik veya geçersiz." =1 ile çalışır eğer, bana pek mantıklı değil.

Performans ve SQL Injection hem nedenlerle, böylece gibi, placeholder variables kullanarak olmalıdır:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID = :pinID and COMMENTID = :commentID");
oci_bind_by_name($query, ':pinID', $pinID, -1, SQLT_INT);
oci_bind_by_name($query, ':commentID', $commentID, -1, SQLT_INT);
oci_execute($query);

oci_execute() 'nin uyarı bir PHP uyarı değildir. Sonuçlanan sorgu ile yanlış bir şey var.

Bunu yazdırın ve ona bir göz atın.

Parantez içindeki değişkenler koymak deneyin:

$query = oci_parse($conn, "SELECT * FROM COMMENTS WHERE PINID={$pinID} and COMMENTID={$commentID}");

Ayrıca emin $commentID sonunda sadece COMMENTID= bırakacaktı ve sorguyu çalıştırmak için çalışırken bir hata neden olur boş bir değer döndüren değil emin olun.