ОК, поэтому я не могу заставить это работать (либо):
$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 в user.php в строке 24
Кто-нибудь знает, можно ли разрешить это или подготовленные заявления за столом? Если да, то как следует защищать от инъекций SQL?
Я никогда не использую метод 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.