ODBC和SQL Server 2008:不能使用预处理语句?(ODBC and SQL Serve

2019-10-17 09:58发布

好了,所以我不能得到这个工作(或):

$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错误:无法在SQLExecute在user.php的上线路24提取错误消息,SQL状态HY000

任何人都知道,如果有可能解决这个问题,或者准备关闭表的语句? 如果是这样,应该如何防范SQL注入?

Answer 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.


文章来源: ODBC and SQL Server 2008: Can't use prepared statements?