Можно ли использовать функции 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. Мне любопытно, если они действительны, или если есть сопоставимые методы.

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

Related of "Можно ли использовать функции store_result () и bind_result () с PHP PDO?"

Дело в том, что нет никакого смысла использовать ни 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(); 

Теперь у вас есть данные пользователя в массиве $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(); }