Можно ли использовать 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() ссылаются в mysqli на www.php.net - ... Мне интересно, являются ли они действительными или существуют сопоставимые методы.

Edit: очевидно, есть некоторый перевод между двумя методами. Мой предположение, что store_result и bind_result() похожи на PDO fetch() команды.

3 ответов


суть в том, что нет абсолютно никакого смысла использовать ни store_result (), ни bind_result () с PDO.
Просто получите свои данные и используйте их в любом месте. В этом весь смысл PDO.

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

теперь у вас есть userdata в $row массив.

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

extract($row);

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

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

В РЕАЛЬНОЙ ЖИЗНИ Мы никогда вызов базы данных в глобальный масштаб, а в функции такой

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

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


вместо 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();
}