Các mã sau đây:PHP PDO với foreach và lấy
<?php
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
echo "Connection is successful!<br/>";
$sql = "SELECT * FROM users";
$users = $dbh->query($sql);
foreach ($users as $row) {
print $row["name"] . "-" . $row["sex"] ."<br/>";
}
foreach ($users as $row) {
print $row["name"] . "-" . $row["sex"] ."<br/>";
}
$dbh = null;
}
catch (PDOexception $e) {
echo "Error is: " . $e-> etmessage();
}
OUTPUT:
Connection is successful!
person A-male
person B-female
Chạy "foreach" hai lần không phải là mục đích của tôi, tôi chỉ tò mò tại sao HAI "foreach" báo cáo chỉ xuất kết quả một lần?
Tiếp theo là trường hợp tương tự:
<?php
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
echo "Connection is successful!<br/>";
$sql = "SELECT * FROM users";
$users = $dbh->query($sql);
foreach ($users as $row) {
print $row["name"] . "-" . $row["sex"] ."<br/>";
}
echo "<br/>";
$result = $users->fetch(PDO::FETCH_ASSOC);
foreach($result as $key => $value) {
echo $key . "-" . $value . "<br/>";
}
$dbh = null;
}
catch (PDOexception $e) {
echo "Error is: " . $e-> etmessage();
}
OUTPUT:
Connection is successful!
person A-male
person B-female
SCREAM: Error suppression ignored for
Warning: Invalid argument supplied for foreach()
Nhưng khi tôi xóa các "foreach" đầu tiên từ các mã trên, sản lượng sẽ trở nên bình thường:
<?php
try {
$dbh = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
echo "Connection is successful!<br/>";
$sql = "SELECT * FROM users";
$users = $dbh->query($sql);
echo "<br/>";
$result = $users->fetch(PDO::FETCH_ASSOC);
foreach($result as $key => $value) {
echo $key . "-" . $value . "<br/>";
}
$dbh = null;
}
catch (PDOexception $e) {
echo "Error is: " . $e-> etmessage();
}
OUTPUT:
Connection is successful!
user_id-0000000001
name-person A
sex-male
Bất kỳ ai biết tại sao điều này lại xảy ra? Tôi chỉ là người mới bắt đầu sử dụng PHP, cảm ơn sự giúp đỡ của bạn!
cảm ơn vì đã đề cập đến "chuyển tiếp con trỏ", tôi sẽ google. – nut
Cảm ơn, mặc dù tôi không hiểu rõ nhưng ví dụ của bạn chắc chắn hữu ích cho tôi trong tương lai. – nut
Vui lòng xem thêm một chỉnh sửa khác, tôi đã có lỗi đánh máy: Sử dụng '$ users-> execute();' sau 'foreach' đầu tiên để đặt lại con trỏ về đầu tập hợp kết quả. Điều này rất có thể là những gì bạn đang tìm kiếm. Cache là một giải pháp cụ thể hơn và không thực sự cần thiết vì bạn có thể thực hiện '$ users-> execute();'. Tôi đã thêm nó chỉ cho ví dụ chung. – hakre