Можно ли использовать store_result () и bind_result () с PHP PDO?

Мой вопрос довольно прост: можно ли использоватьstore_result() а такжеbind_result() с PHP PDO?

Вот пример кода, с которым я столкнулся:

$stmt = $mysqli->prepare("SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1")) { 
  $stmt->bind_param('s', $email); // Bind "$email" to parameter.
  $stmt->execute(); // Execute the prepared query.
  $stmt->store_result();
  $stmt->bind_result($user_id, $username, $db_password, $salt); // get variables from result.
  $stmt->fetch();

Я видел их в контекстеmysqli, но не с PHP PDO.store_result() а такжеbind_result() ссылки в MySQL на www.php.net. Я'Мне любопытно, если они действительны, или если есть сопоставимые методы.

Редактировать: Очевидно, есть некоторый перевод между двумя методами. Я предполагаю, чтоstore_result а такжеbind_result() похожи на PDOfetch() команды.

Ответы на вопрос(3)

Вместоstore_result а такжеbind_result; Вы можете использовать языковую конструкциюlist, Пример использования должен быть:

$stmt = $pdo->prepare("SELECT id, username, password, salt 
    FROM members 
    WHERE email = ? 
    LIMIT 1")
$stmt->bindValue( 1, $email, PDO::PARAM_STR);
$stmt->execute();
list($user_id, $username, $db_password, $salt) = $stmt->fetch( PDO::FETCH_NUM );

PDO::FETCH_NUM используется потому что:

list() работает только с числовыми массивами и предполагает, что числовые индексы начинаются с 0.

и я недавно использовал в моем проекте.

$prep_stmt = "SELECT id FROM member WHERE username = ? LIMIT 1";
$stmt = $mysqli->prepare($prep_stmt);

if ($stmt) 
{
    $stmt->bindparam(1, $username);
    $stmt->execute();
    $result=$stmt->fetchALL(PDO::FETCH_OBJ);
}
if ($stmt->rowCount() == 1) 
{
    echo"user exist";
    $stmt->close();
}
Решение Вопроса

нет абсолютно никакого смысла в использовании ни store_result (), ни bind_result () с PDO.

Просто получите ваши данные и используйте их где угодно. Тот'Суть СДП.

$sql  = "SELECT id, username, password, salt FROM members WHERE email = ? LIMIT 1";
$stmt = $pdo->prepare($sql);
$stmt->execute(array($email));
$row  = $stmt->fetch();

Теперь у вас есть ваши пользовательские данные в$row массив.

Сохранение результирующей строки в отдельных переменныхочень редко практикуется в наши дни. Но если вы предпочитаете такой древний способ работы с данными, вы можете добавить

extract($row);

к приведенному выше коду, чтобы получить ваши глобальные переменные.

Основная проблема с mysqli-way заключается в том, что его крайне сложно использовать с любым уровнем абстракции.

В реальной жизни мыникогда вызов для базы данных вглобальный охват, а скорее в такой функции

function getUserData() {
    // getting data
    return $array;
}

и по какой-то причине этот простой, но в основном используемый код становится чрезвычайно сложным с mysqli! В реальной жизни мы неТебе нужны отдельные переменные, а должен быть возвращен один массив. Но с помощью mysqli нам нужно сначала получить эти переменные, затем поместить их в массив и только потом вернуть их. Просто сумасшедший!

 Hagen von Eitzen18 авг. 2018 г., 13:28
Смущенный. Сначала вы подчеркиваете, что в этом нет никакого смысла, а затем сразу же предлагаете не использовать ни store_result, ни bind_result.
 Mlagma04 июн. 2013 г., 07:24
Тот'Это хороший момент. Я нашел это странным, так как яМы использовали исключительно PDO. Казалось, больше шагов, чем я реализовал в прошлом.

Ваш ответ на вопрос