0

嗨,我的 PHP 脚本遇到了一个独特的问题。这是我的代码。执行后writeToDB()我看不到回声("<script> top.location.href=www.facebook.com</script>");

有人可以告诉我为什么我的脚本在写入数据库后停止执行吗?

<?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>
4

4 回答 4

2

你的 JavaScript 代码应该是

echo ("<script> top.location.href='http://www.facebook.com';</script>");
于 2013-05-31T06:56:00.093 回答
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 关闭,没有任何错误显示

于 2013-05-31T06:58:02.447 回答
0

您没有在字符串周围使用引号: www.facebook.com应该是'www.facebook.com'

于 2013-05-31T07:00:36.520 回答
0

这是因为 writeToDB() 导致错误。您看不到此错误,因为 error_display 已关闭或 error_reporting = 0 也可能您没有安装 OCI8。因此,当您调用 oci_connect 时,它会导致错误。

谢谢。

于 2013-05-31T06:55:32.053 回答