Как получить строку с PDO

Я пытаюсь не расстраиваться, но недавно я узнал, что mysql_* обесценивается в PHP. Я решил, что узнаю, как использовать PDO. Я просто смотрел на него сегодня днем, и подключение к базе данных было легко, но потом я хотел получить строку с ней и сохранить строку как массив, индексированный именами столбцов (так же, как функция mysql_fetch_array ). Я не могу понять, чтобы спасти свою жизнь. Я выложу свой код, чтобы уточнить, и я уверен, что это что-то простое (все ошибки программирования всегда просты), но я определенно делаю что-то неправильно.

 //CONNECT TO DATABASE $host = $_PARAM["DatabaseServer"]; $db = $_PARAM["MainDatabase"]; $dbuser = $_PARAM["DatabaseUser"]; $dbpass = $_PARAM["DatabasePass"]; try { $Database = new PDO("mysql:host=$host;dbname=$db", $dbuser, $dbpass); } catch (PDOException $e) { echo "There was an unexpected error. Please try again, or contact us with concerns"; } $stmt = $Database->prepare("SELECT * FROM users WHERE username=?"); $stmt->execute(array($sUserCook)); $row = $stmt->fetchAll(PDO::FETCH_ASSOC); echo $row["username"]; 

Спасибо вам за помощь.

Alex

fetchAll делает то, что он говорит: он извлекает все результаты для запроса. Поскольку он получает много результатов, вы получите индексированный массив.

fetch делает то, что вы можете искать, если хотите только одну строку: он извлекает один результат для запроса. Если вы конвертируете код mysql_* в PDO, самым быстрым способом было бы просто использовать этот метод вместо mysql_fetch_assoc .

Если вы все еще собираетесь с fetchAll : ваш код, вероятно, будет выглядеть следующим образом:

 $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); foreach ($rows as $row) { echo $row['username']; } 

Как я уже сказал, если вы просто конвертируете устаревший код в код PDO, может быть проще просто изменить все запросы к подготовленным операторам и заменить следующее:

  • mysql_fetch_assoc($result)
    -> $stmt->fetch(PDO::FETCH_ASSOC)
  • mysql_num_rows($result)
    -> $stmt->rowCount()
  • while ($row = mysql_fetch_assoc($result)) {}
    -> foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {}

использование

 $row = $stmt->fetch(PDO::FETCH_ASSOC); 

Вы получите первый результат запроса.