Hướng dẫn insert into mysqli php with variables - chèn vào php mysqli với các biến

Đã lâu rồi và có lẽ bạn đã tìm ra câu trả lời nhưng chỉ trong trường hợp, hóa ra đó thực sự là một vấn đề đơn giản trong đó bạn đặt trích dẫn và dấu chấm đôi trong câu lệnh MYSQLI truy vấn tại các giá trị ('". $ Username" '), nhưng nếu bạn chỉ để nó trong các trích dẫn đơn và chỉ viết tên biến bên trong các trích dẫn như, giá trị (' $ username '), nó sẽ hoạt động. Tôi nghĩ rằng nó áp dụng cho các phiên bản mới của PHP mặc dù không chắc chắn thay đổi

"INSERT INTO users (username, password, email, firstName, lastName, createDate) VALUES ('".$username."', 'test', 'test', 'test', 'test', 'test')"

đến

"INSERT INTO users (username, password, email, firstName, lastName, createDate) VALUES ('$username', 'test', 'test', 'test', 'test', 'test')"

Thông báo trong trường Giá trị Biến của tôi không được đặt trong các trích dẫn kép hoặc được nối trong các khoảng thời gian, tức là các giá trị ('$ username'), vì nó sẽ lưu các khoảng thời gian dưới dạng giá trị.

Điều này phù hợp với tôi nhưng tôi đã nhận thấy một vấn đề trong việc chạy truy vấn với cùng một giá trị một lần nữa, nó mang lại lỗi nhưng có thể tránh được bằng cách thêm một cột trong bảng cơ sở dữ liệu của bạn cho ID tăng tự động để đảm bảo rằng giá trị là được thay đổi mỗi khi bạn chạy truy vấn

Hi vọng điêu nay co ich

  1. Chạy truy vấn chèn với mysqli thô
  2. Giải trình
  3. Chèn truy vấn với hàm trợ giúp
  4. Chèn truy vấn từ một mảng
  5. Nó thường xảy ra rằng chúng ta có một mảng bao gồm các trường và các giá trị của chúng đại diện cho một hàng được chèn vào cơ sở dữ liệu. Và tự nhiên sẽ là một ý tưởng tốt để có một chức năng để chuyển đổi một mảng như vậy thành một câu lệnh SQL chèn chính xác và thực hiện nó. Vì vậy, ở đây nó đi (sử dụng hàm trợ giúp được đề cập ở trên nhưng bạn có thể dễ dàng viết lại nó thành RAW MySQLI nếu bạn muốn):

Trước hết chức năng này sẽ cần một chức năng trợ giúp của riêng nó. Chúng tôi sẽ cần một chức năng để thoát khỏi số nhận dạng MySQL. Có, tất cả các định danh phải được trích dẫn và thoát ra, theo tiêu chuẩn MySQL, để tránh các vấn đề cú pháp khác nhau.prepared statements for any SQL query that would contain a PHP variable. Therefore, as usually the INSERT query makes little sense without variables, it should always run through a prepared statement. To do so:

  • Và bây giờ chúng ta cuối cùng có thể có một chức năng chấp nhận tên bảng và một mảng có dữ liệu và chạy truy vấn chèn đã chuẩn bị đối với cơ sở dữ liệu:
  • function prepared_insert($conn$table$data) {
        
    $keys array_keys($data);
        
    $keys array_map('escape_mysql_identifier'$keys);
        
    $fields implode(","$keys);
        
    $table escape_mysql_identifier($table);
        
    $placeholders str_repeat('?,'count($keys) - 1) . '?';
        
    $sql "INSERT INTO $table ($fields) VALUES ($placeholders)";
        
    prepared_query($conn$sqlarray_values($data));
    }
    Bài viết liên quan:
  • MySQLI chọn truy vấn với các câu lệnh đã chuẩn bị
  • Cách chạy truy vấn chọn bằng MySQLI
  • Cách chạy truy vấn cập nhật bằng MySQLI

Câu lệnh đã chuẩn bị MySQLI với nhiều giá trị cho trong mệnh đề

Chạy truy vấn chèn với mysqli thô

Giải trình

Nhận xét (3)

Không cần phải nói rằng bạn phải sử dụng các câu lệnh đã chuẩn bị cho bất kỳ truy vấn SQL nào có chứa biến PHP. Do đó, như thường thì truy vấn chèn có rất ít ý nghĩa mà không có biến, nó phải luôn luôn chạy qua một câu lệnh đã chuẩn bị. Làm như vậy:

Giải trình

Nhận xét (3)

$sql "INSERT INTO users (name, email, password) VALUES (?,?,?)";

Không cần phải nói rằng bạn phải sử dụng các câu lệnh đã chuẩn bị cho bất kỳ truy vấn SQL nào có chứa biến PHP. Do đó, như thường thì truy vấn chèn có rất ít ý nghĩa mà không có biến, nó phải luôn luôn chạy qua một câu lệnh đã chuẩn bị. Làm như vậy:

Tạo câu lệnh SQL Chèn chính xác there should be no quotes around question marks, you are adding placeholders, not strings.

$stmt$conn->prepare($sql);

Thay thế tất cả các biến trong truy vấn bằng các dấu câu hỏi (được gọi là người giữ chỗ hoặc tham số)

$stmt->bind_param("sss"$name$email$passwor);

Sau đó các biến phải được liên kết với câu lệnh. Cuộc gọi bao gồm hai phần - chuỗi với các loại và danh sách các biến. Với MySQLI, bạn phải chỉ định loại cho từng biến bị ràng buộc. Nó được đại diện bởi một chữ cái duy nhất trong tham số đầu tiên. Số lượng chữ cái phải luôn bằng số lượng biến. Các loại có thể là

  • Tôi cho số nguyên
  • D FOF Double (Float)
  • s cho chuỗi
  • B cho đốm màu

Lưu ý rằng bạn hầu như luôn có thể sử dụng "S" một cách an toàn cho bất kỳ biến nào. that you can almost always safely use "s" for any variable.

Vì vậy, bạn có thể nói bây giờ rằng "SSS" có nghĩa là "sẽ có 3 biến, tất cả các loại chuỗi". Và sau đó, một cách tự nhiên, ba biến ngoan ngoãn làm theo.

$stmt->execute();

Sau đó, truy vấn cuối cùng đã được thực thi. Có nghĩa là các biến được gửi đến máy chủ cơ sở dữ liệu và truy vấn thực sự được thực thi.

Lưu ý rằng bạn không phải kiểm tra kết quả thực thi. Cho bạn có mã kết nối thích hợp được đề cập ở trên, trong trường hợp lỗi MySQLI sẽ tự động tăng lỗi. that you don't have to check the execution result. Given you have the proper connection code mentioned above, in case of error mysqli will raise an error automatically.

Chèn truy vấn với hàm trợ giúp

Như bạn có thể lưu ý, mã khá dài dòng. Nếu bạn thích xây dựng một mã như một nhân vật Lego, với hàng ngũ các nhà khai thác tỏa sáng, bạn có thể giữ nó như hiện tại. Nếu bạn, giống như tôi, ghét sự lặp lại vô dụng và thích viết mã ngắn gọn và có ý nghĩa, thì có một chức năng trợ giúp đơn giản. Với nó, mã sẽ trở nên ngắn hơn hai lần:

$sql "INSERT INTO users (name, email, password) VALUES (?,?,?)";
prepared_query($conn$sql, [$name$email$password]);

Ở đây chúng tôi đang gọi chức năng trợ giúp bằng cách sử dụng biến kết nối, truy vấn SQL và một mảng với các biến. Đơn giản, sạch sẽ và an toàn!

Chèn truy vấn từ một mảng

Nó thường xảy ra rằng chúng ta có một mảng bao gồm các trường và các giá trị của chúng đại diện cho một hàng được chèn vào cơ sở dữ liệu. Và tự nhiên sẽ là một ý tưởng tốt để có một chức năng để chuyển đổi một mảng như vậy thành một câu lệnh SQL chèn chính xác và thực hiện nó. Vì vậy, ở đây nó đi (sử dụng hàm trợ giúp được đề cập ở trên nhưng bạn có thể dễ dàng viết lại nó thành RAW MySQLI nếu bạn muốn):

Trước hết chức năng này sẽ cần một chức năng trợ giúp của riêng nó. Chúng tôi sẽ cần một chức năng để thoát khỏi số nhận dạng MySQL. Có, tất cả các định danh phải được trích dẫn và thoát ra, theo tiêu chuẩn MySQL, để tránh các vấn đề cú pháp khác nhau.a function to escape MySQL identifiers. Yes, all identifiers must be quoted and escaped, according to MySQL standards, in order to avoid various syntax issues.

function escape_mysql_identifier($field){
    return 
"`".str_replace("`""``"$field)."`";
}

Và bây giờ chúng ta cuối cùng có thể có một chức năng chấp nhận tên bảng và một mảng có dữ liệu và chạy truy vấn chèn đã chuẩn bị đối với cơ sở dữ liệu:

function prepared_insert($conn$table$data) {
    
$keys array_keys($data);
    
$keys array_map('escape_mysql_identifier'$keys);
    
$fields implode(","$keys);
    
$table escape_mysql_identifier($table);
    
$placeholders str_repeat('?,'count($keys) - 1) . '?';
    
$sql "INSERT INTO $table ($fields) VALUES ($placeholders)";
    
prepared_query($conn$sqlarray_values($data));
}
Bài viết liên quan:

  • MySQLI chọn truy vấn với các câu lệnh đã chuẩn bị
  • Cách chạy truy vấn chọn bằng MySQLI
  • Cách chạy truy vấn cập nhật bằng MySQLI
  • Câu lệnh đã chuẩn bị MySQLI với nhiều giá trị cho trong mệnh đề
  • Sử dụng các câu lệnh đã chuẩn bị MySQLI với toán tử giống như trong SQL
  • Ví dụ mysqli
  • Cách gọi các thủ tục được lưu trữ với MySQLI
  • Cách tạo bộ lọc tìm kiếm cho mysqli
  • Làm thế nào để chạy các truy vấn chèn 1000s với MySQLI?

Mysqli_query () được sử dụng để làm gì?

Định nghĩa và cách sử dụng. Hàm truy vấn () / mysqli_query () thực hiện truy vấn đối với cơ sở dữ liệu.performs a query against a database.

Làm cách nào để chèn các ký tự đặc biệt vào MySQL bằng PHP?

Nó khá là dễ..
A) Thoát khỏi các ký tự đặc biệt với A \.
B) Sử dụng các câu lệnh được chuẩn bị PDO ..
C) Nếu bạn muốn chuyển dữ liệu văn bản mà không phải lo lắng, bạn có thể mã hóa JSON hoặc cơ sở 64-mã hóa chuỗi của bạn trước khi lưu trữ nó trong cơ sở dữ liệu của bạn và sau đó giải mã nó trước khi xử lý ..

Làm thế nào tôi có thể thêm các giá trị vào một cột trong một bảng trong MySQL?

Trong cú pháp, trước tiên, bạn phải chỉ định tên của bảng.Sau đó, trong ngoặc đơn, bạn phải chỉ định tên cột của bảng và các cột phải được phân tách bằng dấu phẩy.Các giá trị mà bạn muốn chèn phải ở bên trong dấu ngoặc đơn và nó phải được theo sau bởi mệnh đề Giá trị.The values that you want to insert must be inside the parenthesis, and it must be followed by the VALUES clause.

Mysqli_query trở lại để chèn vào cái gì?

Trả về các giá trị ¶ Đối với các truy vấn thành công tạo ra một tập kết quả, chẳng hạn như chọn, hiển thị, mô tả hoặc giải thích, mysqli_query () sẽ trả về đối tượng mysqli_result.Đối với các truy vấn thành công khác, mysqli_query () sẽ trả về đúng.mysqli_result object. For other successful queries, mysqli_query() will return true .