2012-11-15 35 views
1

好了,我不能得到這個工作(或):ODBC和SQL Server 2008:不能使用預準備語句?

$stmt = odbc_prepare($conn, "SELECT * FROM Users WHERE username=?"); 
odbc_execute($stmt, array($username)); 
$user = odbc_fetch_object($stmt); 


$stmt = $pdo->prepare("SELECT * FROM Users WHERE username=?"); 
$stmt->execut(array($username)); 
$user = $stmt->fetchObject(); 

都返回同樣的錯誤:

Warning: odbc_execute(): SQL error: Failed to fetch error message, SQL state HY000 in SQLExecute in user.php on line 24

任何人都知道,如果有可能解決這個問題,或者是準備語句離開桌子?如果是這樣,應該如何防範SQL注入?

+0

我添加了一個try/catch塊 - 是否輸出任何有用的信息? –

回答

1

我從來沒有使用fetchObject方法,但這個怎麼樣:

$stmt = $pdo->prepare("SELECT * FROM Users WHERE username=?"); 
$stmt->bindValue(1, $username); 
try{ 
    $stmt->execute(); 
    while ($row = $stmt->fetch()){ 
     // Do whatever. 
    } 
}catch(PDOException $e){ 
    echo($e->getMessage()); 
} 

我也注意到在你的問號單引號(「」),他們不應該在那裏。

爲了使用try/catch語句的東西,當你創建你的PDO連接,您需要包括此:

$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

,你可能要添加這個問題,以及:

$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE); // Try to use the driver's native prepared statements. 
+0

聖芝士漢堡!什麼是逆轉!我很抱歉編輯發生了,但固定的sql是引發錯誤的那些。我很抱歉混淆! –

+0

那麼,如果你使用上面概述的prepare和bindValue方法而不是使用fetchObject方法,你還會得到同樣的錯誤嗎? –

+0

當我嘗試bindvalue()時,我什麼也得不到。沒有警告/錯誤和NULL結果。 –