ODBC和SQL Server 2008:不能使用预准备语句?

时间:2012-11-15 22:37:20

标签: php sql-server-2008 pdo odbc

好的,所以我不能让它工作(或者):

$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();

两者都返回相同的错误:

  

警告:odbc_execute():SQL错误:无法获取错误消息SQL   状态HY000在SQLExecute中   第24行的user.php

任何人都知道是否有可能解决这个问题,或者是否已经准备好了发表的声明?如果是这样,应该如何防范SQL注入?

1 个答案:

答案 0 :(得分: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.