2012-12-31 39 views
10

Tôi có một tập lệnh php chọn dữ liệu qua mysql_, tuy nhiên gần đây tôi đã đọc rằng PDO là cách để đi và mysql_ đang bị khấu hao. Bây giờ tôi đang chuyển đổi kịch bản đó sang PDO.Chọn dữ liệu bảng với các câu lệnh PDO

Câu hỏi của tôi là mặc dù tôi không sử dụng $ _POST để chọn. Tôi chỉ muốn để chọn toàn bộ bảng với tất cả các dữ liệu của nó vì vậy tôi nhập truy vấn này:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query->fetchall(); // or you can just $result = $query as hakre proposed! 

như vậy thì như tôi đã làm với cũ phiên bản mysql_ khấu hao của tôi về kịch bản tôi đã sử dụng echo để echo một bảng với dữ liệu trong đó.

echo 
    "<table border='2'> 
    <tr> 
    <th>ID</th> 
    <th>A Number</th> 
    <th>First Name</th> 
    <th>Last Name</th> 
    <th>Why</th> 
    <th>Comments</th> 
    <th>Signintime</th> 
    </tr>" 
    ; 

    foreach($result as $row) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['id'] . "</td>"; 
    echo "<td><a href=Student.php?studentA_num=" . $row['anum'] . ">" .$row['anum'] . " </a></td>"; 
    echo "<td>" . $row['first'] . "</td>"; 
    echo "<td>" . $row['last'] . "</td>"; 
    echo "<td>" . $row['why'] . "</td>"; 
    echo "<td>" . $row['comments'] . "</td>"; 
    echo "<td>" . $row['signintime'] . "</td>"; 
    echo "<td> <input type=\"button\" value=\"Start Session\"onClick=\accept.php?id=" . $row['id'] . "&start=true></td>"; 
} 

    echo "</tr>"; 
    echo "</table>"; 

hiện đang sử dụng tính năng này, tôi không thể lấy một đầu ra duy nhất cho bảng của mình.

This is all that is being outputted

Câu hỏi của tôi là thiếu một số điều gì đó từ các câu chọn lựa chọn của tôi? Hoặc tôi không tìm nạp bất kỳ hàng nào? Ngoài ra tôi cài đặt kết nối thiết lập trong một kịch bản gọi là connect.php đó là yêu cầu của init.php (ở trên cùng của tất cả các trang của tôi)

Chỉnh sửa: 1

Chỉnh sửa đoạn code để nó hiện đang làm việc, cũng thêm một hình ảnh để cho người khác thấy nó trông như thế nào! Hy vọng rằng một số người có thể đặt điều này vào một số loại sử dụng! This is how it looks!

Trả lời

10

Bạn đang làm quá nhiều thực sự:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $dbh->query($query); 

Dòng vấn đề là:

$result = $dbh->query($query); 

Kiểm tra với http://php.net/pdo.query, tham số là một chuỗi, thực sự là chuỗi SQL bạn đã sử dụng ở trên, không phải giá trị kết quả của cuộc gọi PDO::prepare().

Đối với truy vấn đơn giản, bạn chỉ có thể làm:

$result = $dbh->query("SELECT * FROM students"); 

Hoặc nếu bạn muốn chuẩn bị:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query; 

này sau đó là một số soạn sẵn nếu bạn muốn chèn biến vào truy vấn, đó là tại sao bạn chuẩn bị nó.


Vấn đề tiếp theo là với dòng foreach:

foreach($result as $row); 

Bạn đang chấm dứt vòng lặp ngay lập tức vì dấu chấm phẩy ; ở cuối. Loại bỏ dấu chấm phẩy đó sao cho khối mã theo ngoặc vuông sau đây trở thành phần thân của vòng lặp foreach.

+0

sai lầm ngu ngốc như vậy về phía tôi! Cảm ơn các bạn! – RaGe10940

+0

Bạn là người mới. Trong trường hợp bạn gặp sự cố, hãy bắt đầu xác minh từ trên xuống dưới. Bạn có thể xem xét các biến với ['var_dump()'] (http://php.net/var_dump), thường hữu ích. Cũng đặt báo cáo lỗi của bạn để phát triển lên và lên mức cao nhất. – hakre

+0

Sẽ cảm ơn bạn rất nhiều. – RaGe10940

6

Mã của bạn là sai:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $dbh->query($query); 

Sau khi thực hiện một tuyên bố chuẩn bị, bạn chỉ có thể gọi fetchAll() vào nó:

$query = $dbh->prepare("SELECT * FROM students"); 
$query->execute(); 
$result = $query->fetchAll(); 

Phần còn lại của mã của bạn sẽ hoạt động tốt khi bạn loại bỏ các dấu chấm phẩy sau khi rao giảng.

Các vấn đề liên quan