1

OK、それで私はこれを機能させることができません(どちらか):

$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エラー:エラーメッセージのフェッチに失敗しました。24行目のuser.phpのSQLExecuteのSQL状態HY000

これを解決することが可能かどうか、または準備されたステートメントがテーブルから外れているかどうかを誰かが知っていますか?もしそうなら、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 に答える