我一直在將我做的一個小的登錄腳本轉換為 PDO 試圖嘗試一下。
代碼 mysqli
$stmt = $conn->prepare('SELECT id, name FROM users WHERE id = ?');
$stmt->bind_param('i', $id);
$stmt->execute();
$stmt->store_result();
$stmt->bind_result($id, $name);
if ($stmt->fetch()) {
$_SESSION['id'] = $id;
$_SESSION['name'] = $name;
$is_valid = true;
} else {
$is_valid = false;
self::logout();
}
我改成了 PDO
$sql = "SELECT id, name FROM users WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->bindParam(':id', $id);
$stmt->bindParam(':name', $name);
$stmt->execute();
if ($stmt->fetch())
{
$_SESSION['id'] = $id;
$_SESSION['name'] = $name;
$is_valid = true;
} else {
$is_valid = false;
self::logout();
}
在 mysqli 中,我能夠系結和存盤 $??id 和 $name 但讀取那些在 PDO 中不可用
$stmt->store_result();
$stmt->bind_result($id, $name);
uj5u.com熱心網友回復:
bind_result在 PDO 中沒有等效項,因為您并不真正需要它。只需從行中讀取資料:
if ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
$_SESSION['id'] = $row["id"];
$_SESSION['name'] = $row["name"];
$is_valid = true;
}
您也不需要該$stmt->bindParam(':name', $name);行,因為:name您的 SQL 中沒有輸入引數。
手冊和其他地方提供了更多示例。
另請參閱是否可以將 store_result() 和 bind_result() 與 PHP PDO 一起使用?了解更多有用的背景資訊。
uj5u.com熱心網友回復:
呼叫等效方法bindColumn()。您可以將變數系結到結果集中的一列。
/* Bind by column number */
$stmt->bindColumn(1, $id);
$stmt->bindColumn(2, $name);
while ($stmt->fetch(PDO::FETCH_BOUND)) {
print $name . "\t" . $id. "\n";
}
但是,我建議撰寫更簡單的代碼。PDO 旨在更易于使用。
如果您想讓代碼更簡單,請使用陣列。該方法fetch()回傳一個包含當前行的陣列。當您需要從結果中獲取不止一列時,它們會更好。如果您只需要獲取一列,請使用fetchColumn().
$sql = "SELECT id, name FROM users WHERE id = :id";
$stmt = $conn->prepare($sql);
$stmt->execute([
'id' => $id,
'name' => $name,
]);
if ($row = $stmt->fetch()) {
$_SESSION['id'] = $row['id'];
$_SESSION['name'] = $row['name'];
$is_valid = true;
} else {
$is_valid = false;
self::logout();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329489.html
上一篇:Paypalcurl_setopt($ch,CURLOPT_POSTFIELDSwithPHPvariables
下一篇:陣列合并回傳鍵
