2013-05-31 92 views
0

嗨我的PHP腳本面臨着一個獨特的問題。這裏是我的代碼。 writeToDB()執行後我看不到回聲("<script> top.location.href=www.facebook.com</script>");PHP的某些部分代碼沒有執行

有人可以讓我知道爲什麼我的腳本停止執行後寫入數據庫?

<?php 
function writeToDB($access_token,$uid,$username,$birthday,$gender,$age) 
{ 
    /* Database Connection */ 
    $user = "xxxx"; 
    $password = "xxxx"; 
    $host = "xxxxxxxxxxxxxxxxxx"; 

    //connect to database, where tsnames.ora is setup 
    $connect_obj = oci_connect($user, $password, $host); 
    if ($connect_obj) { 
     error_log("connected okay"); 
    } else { 
     $err = OCIError(); 
     echo "Oracle connection error " . $err[text]; 
     return; 
    } 

    $select_query = "SELECT USER_ID FROM FBTABLE WHERE USER_ID= '$uid'"; 

    $select_sql_stmt = oci_parse($connect_obj, $select_query); 
    //execute statement 
    try { 
     $r = oci_execute($select_sql_stmt, OCI_DEFAULT); 
     if (!$r) { 
      $p = oci_error($select_sql_stmt); 
      echo "Oci Execute error"; 
     } 
    } catch (Exception $e) { 
     echo "<br>Failed to get database info" . $e->getMessage(); 
    } 

    $user_id_in_db = null; 
    while (oci_fetch($select_sql_stmt)) { 
     $user_id_in_db = oci_result($select_sql_stmt, 'USER_ID'); 
    } 

    // User already exists in db so update instead of insert 
    if ($user_id_in_db != null) { 
     $query ="UPDATE FBTABLE SET ACCESS_TOKEN='$access_token' WHERE USER_ID='$uid'"; 
    } else {  
     $query = "INSERT INTO FBTABLE(ACCESS_TOKEN, USER_ID,USER_NAME,BIRTHDAY,GENDER,AGE) 
        VALUES 
        ('$access_token','$uid','$username','$birthday','$gender','$age')"; 
    } 

     //create sql statement 
    $sql_statement = oci_parse($connect_obj, $query); 

    //execute statement 
    try { 
     $r = oci_execute($sql_statement, OCI_DEFAULT); 
     if (!$r) { 
      $p = oci_error($sql_statement); 
      echo "Oci Execute error"; 
     } 
    } catch (Exception $e) { 
     echo "<br>Failed to get database info" . $e->getMessage(); 
    } 

    //Commit transaction 
    $committed = oci_commit($connect_obj); 

    //Test whether commit was successful. If error occurred, return error message 
    if (!$committed) { 
     $error = oci_error($conn); 
     echo 'Commit failed. Oracle reports: ' . $error['message']; 
    } 

    //close the connection 
    $oci_free_statement($sql_statement); 

    if (oci_close($connect_obj)) { 
     echo " oci connection not closed!!!"; 
    } 

    //close the connection 
    $oci_free_statement($sql_statement); 
} 
?> 
<html> 
    <body> 
    <?php 
     $access_token = $_GET['access_token']; 
     $uid   = $_GET['uid']; 
     $username  = $_GET['username']; 
     $birthday  = $_GET['birthday']; 
     $gender  = $_GET['gender']; 
     $age   = $_GET['age']; 

     echo $username; 
     writeToDB($access_token,$uid,$username,$birthday,$gender,$age); 

     echo ("<script> top.location.href=www.facebook.com</script>"); 
    ?>   
    </body> 
</html> 
+2

那麼,也許該命令會產生一個錯誤,終止腳本?日誌文件說什麼?也可能只是這個函數永遠不會返回 - 我們不能說,因爲我們不知道那個函數做了什麼。 – arkascha

+1

寫入writeToDB函數的內容。肯定會發生一些事情。 – Davit

+0

是否確定'writeToDB'上沒有任何錯誤,可能是error_display關閉 –

回答

2

我認爲錯誤是$oci_free_statement($sql_statement);必須oci_free_statement($sql_statement);額外$oci_free_statement

http://php.net/manual/en/function.oci-free-statement.php

沒有因爲error_display的任何錯誤顯示爲關閉

+0

謝謝刪除多餘的$工作。但現在我得到回聲「oci連接未關閉!!!」;消息,儘管我正在成功重定向。 – Santhosh

+0

看到這個例子http://php.net/manual/en/function.oci-close.php#example-2015,因爲直到所有引用關閉,數據庫連接才關閉 –

+0

使用'sleep(10);'for Time to Oracle用於斷開連接 –

0

發生這種情況是因爲writeToDB()導致錯誤。您看不到此錯誤,因爲error_display已關閉或error_reporting = 0 也可能您沒有安裝OCI8。所以當你打電話給oci_connect時會導致錯誤。

謝謝。

2

你的JavaScript代碼應該是

echo ("<script> top.location.href='http://www.facebook.com';</script>"); 
+0

現在感謝我能夠重定向。 – Santhosh

0

你沒有使用引號a圍繞字符串: www.facebook.com應該是'www.facebook.com'