Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Số lượng biến bị ràng buộc trong PHP Mysql PDO không khớp với số lượng mã thông báo

Có vẻ như Mark Baker đã trả lời câu hỏi của bạn, nhưng tôi muốn thêm một số mẹo đã giúp tôi rất nhiều.

PDO không cần mysql_escape_string
Miễn là mọi thứ đi vào truy vấn của bạn liên quan đến đầu vào của người dùng đều sử dụng câu lệnh đã chuẩn bị sẵn (như bạn ở trên), bạn không cần phải thoát khỏi đầu vào bằng mysql_real_escape_string [1].

// Don't worry about SQL injection since all of the user 
// defined inputs are being escaped by the PDO package
$sql = "INSERT INTO "
     .   "`users` "
     . "SET "
     .   "`name` = :name";

$query = $pdo->prepare($sql);
$query->bindParam(':name', $name);
$query->execute();

Nhưng NÊN lưu ý rằng vẫn có thể đưa vào SQL nếu bạn không ràng buộc đầu vào của người dùng:

// SQL injection can totally happen here
$sql = "INSERT INTO "
     .   "`users` "
     . "SET "
     .   "`name` = $name";

$query = $pdo->prepare($sql);
$query->execute();

[1] http://www.php.net/manual/ vi / pdo.prepared-statement.php




Cố gắng làm cho SQL của bạn càng ngắn càng tốt Đối với các câu lệnh SQL đơn giản, nó càng ngắn gọn thì càng dễ bảo trì và bạn ít mắc lỗi hơn. Bạn có thể sử dụng cú pháp CHÈN thay thế [2]:

INSERT INTO 
  `users`
SET
  `name` = 'Steve';

tương đương với:

INSERT INTO 
  `users`
  (
    `name`
  )
  VALUES
  (
    'Steve'
  );

Điều đó có nghĩa là đối với những tuyên bố lớn như của bạn, bạn có thể một nửa kích thước của nó vì bạn không cần phải lặp lại tất cả các tên cột:

$sql  = "INSERT INTO "
      .   "`records_rec` "
      . "SET "
      .   "`oldid_rec`       = :oldid_rec, "
      .   "`firstname_rec`   = :firstname_rec, " 
      .   "`artist_rec`      = :artist_rec, " 
      .   "`aside_rec`       = :aside_rec, "
      .   "`bside_rec`       = :bside_rec, "
      .   "`label_rec`       = :label_rec, "
      .   "`condition_rec`   = :condition_rec, " 
      .   "`genere_rec`      = :genere_rec, "
      .   "`price_rec`       = :price_rec, "
      .   "`collection_rec`  = :collection_rec, "
      .   "`active_rec`      = :active_rec, "
      .   "`info_rec`        = :info_rec, "
      .   "`notes_rec`       = :notes_rec, "
      .   "`order_rec`       = :order_rec, "
      .   "`alabelimage_rec` = :alabelimage_rec, "
      .   "`blabelimage_rec` = :blabelimage_rec, "
      .   "`asound_rec`      = :asound_rec, "
      .   "`bsound_rec`      = :bsound_rec, "
      .   "`featured_rec`    = :featured_rec, "
      .   "`format_rec`      = :format_rec";

$dbh = new PDO(<info goes here>);
$stmt = $dbh->prepare($sql); 

// Bind your params here...

[2] http://dev.mysql.com/doc/ refman / 5.5 / vi / insert.html




Làm cho câu lệnh SQL của bạn có nhiều dòng và khá

Tôi đã bắt đầu định dạng các câu lệnh SQL của mình thành nhiều dòng (như ở trên) và kể từ đó tôi đã gặp ít lỗi hơn WAY như thế này. Nó không chiếm rất nhiều chỗ, nhưng tôi nghĩ cuối cùng thì nó cũng đáng giá. Bằng cách sắp xếp mọi thứ thẳng hàng, nó làm cho các lỗi lòi ra như ngón tay cái bị đau.

Chúc bạn viết mã vui vẻ!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách giữ lại phản ứng dữ dội khi thoát khỏi trích dẫn trong MySQL - QUOTE ()

  2. Các ràng buộc về MySQL và Kiểm tra

  3. Kích hoạt cuộc gọi trong xóa theo tầng

  4. Tệp jar MySQL JDBC trong Ubuntu ở đâu?

  5. Chuyển Hex thành Hình ảnh trong PHP?