Можно ли использовать 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();
}