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ẻ!