2012-09-24 44 views
-1

不知道發生了什麼,我不斷收到錯誤。我已經下跌降低了問題相當小的測試用例,見下圖:PHP在簡單的select查詢上拋出錯誤?


的login.html

<form action="login.php" method="post"> 
    <input type="email" name="email" required /> 
    <input type="password" name="password" required /> 

    <input type="submit" value="Login"/> 
</form> 

的login.php

$email = $_POST["email"]; 
$password = sha1($_POST["password"]); 

$stid2 = oci_parse($conn, 'SELECT EMAIL, PASSWORD FROM TUSERS where EMAIL =: email AND PASSWORD =: password'); 
oci_execute($stid2); 

$nrows = oci_fetch($stid2); 

print var_dump($nrows); 

錯誤

警告:oci_execute():ORA-01008:oci_fetch()::ORA-24374:定義之前沒有讀取或執行操作,並獲取在完成在未結合的login.php第5行

警告所有變量第7行的login.php bool(false)

+1

它的var_dump()不vardump(),以懶得解釋休息。 – 2012-09-24 22:19:25

+0

你不需要綁定電子郵件和密碼嗎? – 2012-09-24 22:25:58

回答

1

您添加變量佔位符插入查詢,但沒有綁定任何東西給他們

$stid2 = oci_parse($conn, 'SELECT EMAIL, PASSWORD FROM TUSERS where EMAIL =:email AND PASSWORD =:password'); 
oci_bind_by_name($stid2, ':email', $email); 
oci_bind_by_name($stid2, ':password', $password); 
oci_execute($stid2); 

oci_bind_by_name

+0

謝謝,還有綁定做任何有關sanitisation? - 如果不是,我該怎麼用? – stackoverflowuser95

+1

正如你所看到的,查詢字符串和變量內容是分別定義的,與db一起工作的庫知道哪個是哪個。查詢和數據甚至可以在單獨的查詢中發送到dbms(如果dbms支持它的話)。所以至少這將防止SQL注入。 –

+0

我很懷疑;不幸的是,我沒有在這裏代表,否則我會upvote你的回答和評論:) – stackoverflowuser95

1

您需要將變量$ email和$ password綁定到oracle佔位符。見oci_bind_by_name。此外,佔位符應該是:email:password。冒號(:)和佔位符名稱(emailpassword)之間有一個空格。