2013-11-05 87 views
0

我一直在試圖讓這個函數工作,對於上下文來說,它意味着我的在線商店的會話獲取器。它在oci_bind_by_name行保持錯誤。我想知道爲什麼會出現這種情況並解決這個問題。PHP OCI錯誤oci_bind_by_name

function getSessionID($customerID) 
{ 
    global $conn; 

    $query = "SELECT SESSIONID FROM \"StrSession\" WHERE EMAIL = ':cid'"; 
    $sessInfo = oci_parse($conn, $query); 

    oci_bind_by_name($sessInfo, ":cid", $customerID, 64); 
    oci_execute($sessInfo); 

    $row = oci_fetch_array($sessInfo); 
    if ($row) 
     return $row["SESSIONID"]; 
    else 
     return null; 
} 

這是怎麼了登錄會話:

function logSession($customerID) 
{ 
    global $conn; 

    // Is the customer already logged in? If so, log them out then log back in again. 
    if (isLoggedIn($customerID)) 
     unlogSession($customerID); 

    $sessionID = session_id(); 

    $bindVars = array(
     array("varname" => "sessionID", "bindname" => ":sid", "length" => 64), 
     array("varname" => "customerID", "bindname" => ":cid", "length" => 64) 
    ); 

    // Insert a new row into the session table with the session ID and customer ID 
    $query = oci_parse($conn, "INSERT INTO \"StrSession\" VALUES(':sid', ':cid')"); 

    foreach ($bindVars as $field) 
     oci_bind_by_name($query, $field["bindname"], ${$field["varname"]}, $field["length"]); 

    if (DEBUG) echo "Query: $query\n"; 

    oci_execute($query); 
} 

最後,這是登錄如何檢查:

function checkLogin($username, $pass) 
{ 
    global $conn; 

    $passhash = md5($pass); 

    $query = "SELECT \"EMAIL\" FROM \"StrCustomer\"" 
    . " WHERE \"USERNAME\" = '$username' AND \"PASSWORD\" = '$passhash'"; 
    $loginInfo = oci_parse($conn, $query); 
    oci_execute($loginInfo); 

    $row = oci_fetch_array($loginInfo); 
    if ($row) 
     return $row["EMAIL"]; 
    else 
     return null; 
} 
+0

「保持示數出來」?請具體告訴我們你看到的錯誤。 –

+0

當用戶嘗試登錄時,他們不會被重定向到產品目錄,而是會看到: ORA-01036 oci_bind_by_name非法變量/編號 – Lireoec

+0

您也不需要在此處引用表名,也不需要在佔位符周圍。 '「INSERT INTO \」StrSession \「VALUES(':sid',':cid')」);' –

回答

0

不要把周圍的綁定變量單引號。只需刪除它們。這就是你將要爲你的選擇查詢的事:

$query = "SELECT SESSIONID FROM \"StrSession\" WHERE EMAIL = :cid"; 

併爲您插入查詢:

$query = oci_parse($conn, "INSERT INTO \"StrSession\" VALUES(:sid, :cid)");