1

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

$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 在 user.php 中的 SQLExecute 中的第 24 行

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

4

1 回答 1

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.
于 2012-11-16T16:18:34.010 回答