Php lấy tất cả các hàng từ truy vấn mysql

Tôi nghĩ rằng

$result = mysql_query["SELECT * FROM messageInfo WHERE senderUsername='$username' OR recieverUsername='$username'"];

while [$row = mysql_fetch_assoc[$result]] {
    print_r[$row];
}
2 không thực sự cần thiết trong truy vấn này, câu lệnh
$result = mysql_query["SELECT * FROM messageInfo WHERE senderUsername='$username' OR recieverUsername='$username'"];

while [$row = mysql_fetch_assoc[$result]] {
    print_r[$row];
}
3 sẽ là vừa đủ

Giải pháp liên quan

Php – Cách ngăn SQL injection trong PHP

Cách chính xác để tránh các cuộc tấn công SQL injection, bất kể bạn sử dụng cơ sở dữ liệu nào, là tách dữ liệu khỏi SQL, để dữ liệu vẫn là dữ liệu và sẽ không bao giờ được trình phân tích cú pháp SQL diễn giải thành các lệnh. Có thể tạo câu lệnh SQL với các phần dữ liệu được định dạng chính xác, nhưng nếu bạn không hiểu đầy đủ chi tiết, bạn nên luôn sử dụng câu lệnh đã chuẩn bị sẵn và truy vấn được tham số hóa. Đây là các câu lệnh SQL được máy chủ cơ sở dữ liệu gửi đến và phân tích cú pháp riêng biệt với bất kỳ tham số nào. Bằng cách này, kẻ tấn công không thể tiêm SQL độc hại

Về cơ bản, bạn có hai lựa chọn để đạt được điều này

  1. Sử dụng PDO [đối với mọi trình điều khiển cơ sở dữ liệu được hỗ trợ]

     $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];
    
     $stmt->execute[[ 'name' => $name ]];
    
     foreach [$stmt as $row] {
         // Do something with $row
     }
    
  2. Sử dụng MySQLi [dành cho MySQL]

     $stmt = $dbConnection->prepare['SELECT * FROM employees WHERE name = ?'];
     $stmt->bind_param['s', $name]; // 's' specifies the variable type => 'string'
    
     $stmt->execute[];
    
     $result = $stmt->get_result[];
     while [$row = $result->fetch_assoc[]] {
         // Do something with $row
     }
    

Nếu bạn đang kết nối với cơ sở dữ liệu không phải MySQL, thì có tùy chọn thứ hai dành riêng cho trình điều khiển mà bạn có thể tham khảo [ví dụ:

$result = mysql_query["SELECT * FROM messageInfo WHERE senderUsername='$username' OR recieverUsername='$username'"];

while [$row = mysql_fetch_assoc[$result]] {
    print_r[$row];
}
4 và
$result = mysql_query["SELECT * FROM messageInfo WHERE senderUsername='$username' OR recieverUsername='$username'"];

while [$row = mysql_fetch_assoc[$result]] {
    print_r[$row];
}
5 cho PostgreSQL]. PDO là tùy chọn phổ quát

Thiết lập kết nối chính xác

Lưu ý rằng khi sử dụng PDO để truy cập cơ sở dữ liệu MySQL, các câu lệnh chuẩn bị thực không được sử dụng theo mặc định. Để khắc phục điều này, bạn phải tắt mô phỏng các câu lệnh đã chuẩn bị. Một ví dụ về việc tạo kết nối bằng PDO là

$dbConnection = new PDO['mysql:dbname=dbtest;host=127.0.0.1;charset=utf8', 'user', 'password'];

$dbConnection->setAttribute[PDO::ATTR_EMULATE_PREPARES, false];
$dbConnection->setAttribute[PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION];

Trong ví dụ trên, chế độ lỗi không thực sự cần thiết, nhưng bạn nên thêm nó vào. Bằng cách này, tập lệnh sẽ không dừng lại với ____06 khi có sự cố xảy ra. Và nó mang lại cho nhà phát triển cơ hội để

$result = mysql_query["SELECT * FROM messageInfo WHERE senderUsername='$username' OR recieverUsername='$username'"];

while [$row = mysql_fetch_assoc[$result]] {
    print_r[$row];
}
7 bất kỳ [các] lỗi nào mà
$result = mysql_query["SELECT * FROM messageInfo WHERE senderUsername='$username' OR recieverUsername='$username'"];

while [$row = mysql_fetch_assoc[$result]] {
    print_r[$row];
}
8n thành
$result = mysql_query["SELECT * FROM messageInfo WHERE senderUsername='$username' OR recieverUsername='$username'"];

while [$row = mysql_fetch_assoc[$result]] {
    print_r[$row];
}
9

Tuy nhiên, điều bắt buộc là dòng

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
0 đầu tiên, yêu cầu PDO tắt các câu lệnh đã chuẩn bị được mô phỏng và sử dụng các câu lệnh đã chuẩn bị thực sự. Điều này đảm bảo câu lệnh và các giá trị không được PHP phân tích cú pháp trước khi gửi nó đến máy chủ MySQL [khiến kẻ tấn công không có cơ hội tiêm SQL độc hại]

Mặc dù bạn có thể đặt

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
1 trong các tùy chọn của hàm tạo, điều quan trọng cần lưu ý là các phiên bản PHP 'cũ' [trước 5. 3. 6] âm thầm bỏ qua tham số bộ ký tự trong DSN

Giải trình

Câu lệnh SQL bạn chuyển đến

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
2 được máy chủ cơ sở dữ liệu phân tích cú pháp và biên dịch. Bằng cách chỉ định các tham số [có thể là
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
3 hoặc tham số được đặt tên như
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
4 trong ví dụ trên], bạn cho công cụ cơ sở dữ liệu biết nơi bạn muốn lọc. Sau đó, khi bạn gọi
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
5, câu lệnh đã chuẩn bị được kết hợp với các giá trị tham số mà bạn chỉ định

Điều quan trọng ở đây là các giá trị tham số được kết hợp với câu lệnh đã biên dịch, không phải là chuỗi SQL. SQL injection hoạt động bằng cách lừa tập lệnh bao gồm các chuỗi độc hại khi nó tạo SQL để gửi đến cơ sở dữ liệu. Vì vậy, bằng cách gửi SQL thực riêng biệt với các tham số, bạn sẽ hạn chế rủi ro kết thúc bằng thứ mà bạn không có ý định

Bất kỳ tham số nào bạn gửi khi sử dụng câu lệnh đã chuẩn bị sẽ chỉ được coi là chuỗi [mặc dù công cụ cơ sở dữ liệu có thể thực hiện một số tối ưu hóa để tất nhiên, tham số cũng có thể kết thúc dưới dạng số]. Trong ví dụ trên, nếu biến

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
6 chứa
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
7 thì kết quả sẽ chỉ là tìm kiếm chuỗi
 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
8 và bạn sẽ không nhận được một bảng trống

Một lợi ích khác của việc sử dụng các câu lệnh đã chuẩn bị là nếu bạn thực hiện cùng một câu lệnh nhiều lần trong cùng một phiên thì nó sẽ chỉ được phân tích cú pháp và biên dịch một lần, giúp bạn tăng tốc độ

Ồ, và vì bạn đã hỏi về cách thực hiện cho phần chèn, đây là một ví dụ [sử dụng PDO]

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
0

Câu lệnh đã chuẩn bị có thể được sử dụng cho các truy vấn động không?

Mặc dù bạn vẫn có thể sử dụng các câu lệnh đã chuẩn bị cho các tham số truy vấn, nhưng bản thân cấu trúc của truy vấn động không thể được tham số hóa và một số tính năng truy vấn nhất định không thể được tham số hóa

Đối với những trường hợp cụ thể này, điều tốt nhất cần làm là sử dụng bộ lọc danh sách trắng để hạn chế các giá trị có thể

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
1

Mysql – nối nhiều hàng MySQL vào một trường

Bạn có thể dùng

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
2

Như Ludwig đã nêu trong bạn có thể thêm toán tử

 $stmt = $dbConnection->prepare['SELECT * FROM employees WHERE name = ?'];
 $stmt->bind_param['s', $name]; // 's' specifies the variable type => 'string'

 $stmt->execute[];

 $result = $stmt->get_result[];
 while [$row = $result->fetch_assoc[]] {
     // Do something with $row
 }
0 để tránh trùng lặp

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
4

Như Jan đã nêu trong bạn cũng có thể sắp xếp các giá trị trước khi kích hoạt nó bằng cách sử dụng

 $stmt = $dbConnection->prepare['SELECT * FROM employees WHERE name = ?'];
 $stmt->bind_param['s', $name]; // 's' specifies the variable type => 'string'

 $stmt->execute[];

 $result = $stmt->get_result[];
 while [$row = $result->fetch_assoc[]] {
     // Do something with $row
 }
1

 $stmt = $pdo->prepare['SELECT * FROM employees WHERE name = :name'];

 $stmt->execute[[ 'name' => $name ]];

 foreach [$stmt as $row] {
     // Do something with $row
 }
6

Như Dag đã nêu trong kết quả có giới hạn 1024 byte. Để giải quyết vấn đề này, hãy chạy truy vấn này trước truy vấn của bạn

Làm cách nào để có được tất cả các hàng trong SQL PHP?

Hàm fetch_all[] / mysqli_fetch_all[] tìm nạp tất cả các hàng kết quả và trả về tập kết quả dưới dạng một mảng kết hợp, một mảng số .

Làm cách nào để tìm nạp hàng trong PHP MySQL?

Hàm fetch_row[] / mysqli_fetch_row[] tìm nạp một hàng từ tập kết quả và trả về dưới dạng một mảng liệt kê.

Làm cách nào tôi có thể nhận nhiều hàng từ cơ sở dữ liệu trong PHP?

Lấy nhiều hàng từ cơ sở dữ liệu php .
$sql = "CHỌN tên mặt hàng, mô tả, giá TỪ các mặt hàng Ở ĐÂU itemid = '". $itemID. "'";
$result = $conn->query[$sql];
nếu[$result->num_rows > 0]
// Lưu trữ giá vật phẩm
// lấy giá trị ở hàng "price"
$itemPrice = $result->fetch_assoc[]["price"];
tiếng vang $itemprice;

Làm cách nào để sử dụng Mysql_fetch_assoc trong PHP?

Định nghĩa và cách sử dụng . Ghi chú. Tên trường được trả về từ hàm này phân biệt chữ hoa chữ thường. fetches a result row as an associative array. Note: Fieldnames returned from this function are case-sensitive.

Chủ Đề