2013-04-25 47 views
0

簡單的PHP頁面(我不是PHP專家,只是學習)更新MS SQL數據庫。以下代碼會生成一個我不知道如何解決的錯誤。在PHP頁面更新MS SQL數據庫中跟蹤錯誤原因

include '/connections/SFU.php'; 
$query = "UPDATE Person SET PhotoURL = '".$file["name"]."' WHERE USERID='".$_REQUEST['user_id']."';"; 
if ($result = odbc_exec($dbconnect, $query)) { 
    echo "// Success!"; 
} 
else { 
    echo "// Failure!"; 
} 
odbc_close($dbconnect); 
//End Update 

本節未能在每次「如果($結果...」

但是,如果我運行幾乎相同的代碼

include '/connections/SFU.php'; 
$query = "UPDATE Person SET PhotoURL = '89990.jpg' WHERE USERID='80'"; 
if ($result = odbc_exec($dbconnect, $query)) { 
// Success! 
} 
else { 
// Failure! 
} 
odbc_close($dbconnect); 
//End Update 

它工作得很好。我有回顯$查詢字符串的屏幕和字符串是相同的兩個。我不明白爲什麼它在一個失敗,而不是另一個?

也奇怪的是,當我使用參數化查詢,如

include '/connections/SFU.php'; 
$query = "UPDATE dbo.Person SET PhotoURL=? WHERE USERID=?"; 
if ($res = odbc_prepare($dbconnect,$query)) { 
    echo "Prepare Success"; 
} else { 
    echo "Prepare Failed".odbc_errormsg(); 
} 
$uid = $_REQUEST['user_id']; 
$fn = $file["name"]; 
echo "query=".$query." userid=".$uid." filename=".$fn; 
if ($result = odbc_exec($res, array($fn, $uid))) {  
    echo "// Success!"; 
} 
else { 
    echo odbc_errormsg(); 
    echo "// Failure!"; 
} 
odbc_close($dbconnect); 

查詢在上面的準備部分失敗,但在下面的odbc_exec部分失敗:

include '/connections/SFU.php'; 
$query = "UPDATE Person SET PhotoURL=? WHERE USERID=?"; 
if ($res = odbc_prepare($dbconnect,$query)) { 
    echo "Prepare Success"; 
} else { 
    echo "Prepare Failed".odbc_errormsg(); 
} 
$uid = "80"; 
$fn = "samplefile.jpg"; 
echo "query=".$query." userid=".$uid." filename=".$fn; 
if ($result = odbc_exec($res, array($fn, $uid))) {  
    echo "// Success!"; 
} 
else { 
    echo odbc_errormsg(); 
    echo "// Failure!"; 
} 
odbc_close($dbconnect); 

在任何情況下,我沒有得到任何odbc_errormsg()。

+1

請在代碼中使用[綁定參數](http://php.net/manual/en/security.database.sql-injection.php),不要只傳入網站的原始數據。 – Pondlife 2013-04-25 16:53:20

回答

1

從您的查詢中移除額外的;

$query = "UPDATE Person SET PhotoURL = '".$file["name"]."' WHERE 
      USERID='".$_REQUEST['user_id']."';"; 
             ^

所以您的查詢應該是,

$query = "UPDATE Person SET PhotoURL = '".$file["name"]."' WHERE 
      USERID='".$_REQUEST['user_id']; 

也有使用odbc_errormsg()所以你可以有一個更好的想法,爲什麼您的查詢獲取失敗的做法。

警告:您的密碼易遭到sql injection attacks

+0

感謝您的回答。我已經嘗試了兩種方法(有和沒有)額外的「;」我也試過使用參數,並在兩種情況下失敗。 – JustJeffy 2013-04-25 17:14:14

+0

迴應您的查詢和檢查。你還有在其他情況下添加'odbc_errormsg();'? – Rikesh 2013-04-25 17:19:49

+0

也許我做錯了,但odbc_errormsg不會返回任何值。 – JustJeffy 2013-04-25 17:41:41