Trích dẫn MySQL INSERT thủ công - Cũng vậy với UPDATE:Chuẩn bị một tuyên bố/UPDATE MySQL INSERT với giá trị DEFAULT
Use the keyword DEFAULT to set a column explicitly to its default value. This makes it easier to write INSERT statements that assign values to all but a few columns, because it enables you to avoid writing an incomplete VALUES list that does not include a value for each column in the table. Otherwise, you would have to write out the list of column names corresponding to each value in the VALUES list.
Vì vậy, trong ngắn hạn nếu tôi viết
INSERT INTO table1 (column1,column2) values ('value1',DEFAULT);
Một hàng mới với column2 thiết lập như giá trị mặc định của nó - bất kỳ giá trị nào có thể - được chèn vào.
Tuy nhiên nếu tôi chuẩn bị và thực hiện một tuyên bố trong PHP:
$statement = $pdoObject->
prepare("INSERT INTO table1 (column1,column2) values (?,?)");
$statement->execute(array('value1','DEFAULT'));
Hàng mới sẽ chứa 'DEFAULT' như giá trị văn bản của nó - nếu cột có khả năng lưu trữ các giá trị văn bản.
Bây giờ tôi đã viết một lớp trừu tượng để PDO (Tôi cần nó) và để có được xung quanh vấn đề này đang xem xét để đưa ra một
const DEFAULT_VALUE = "randomstring";
Vì vậy, tôi có thể thực hiện báo cáo như thế này:
$statement->execute(array('value1',mysql::DEFAULT_VALUE));
Và sau đó trong phương pháp mà không ràng buộc tôi đi qua các giá trị được gửi đến bị ràng buộc và nếu một số là tương đương với self::DEFAULT_VALUE
, hành động phù hợp.
Tôi chắc chắn có cách tốt hơn để thực hiện việc này. Có ai khác gặp phải tình huống tương tự không?
Vì PDO đang xử lý giá trị của bạn dưới dạng chuỗi để nhập, có vẻ như bạn có thể phải thay đổi mã một chút, nếu có thể. Bạn có thể thay đổi nó để bạn gõ '... execute (array ('\' value1 \ '', 'DEFAULT'))', nhưng tôi đoán PDO đang xử lý các giá trị này cho bạn với 'mysql_real_escape_string() ', vv Điều này sẽ đánh bại chức năng đó. Bạn có lẽ sẽ phải chèn trực tiếp nó vào đối số 'prepare()'. – Jonah
Tại sao không chỉ bao gồm các cột trong câu lệnh 'INSERT' mà bạn đang đặt thành một giá trị khác với giá trị mặc định? –
Vấn đề là với 'UPDATE' và một đầu vào được gửi trống. Tôi cần nó là một mặc định, không ví dụ '0000-00-00' cho các trường ngày khi '' '' được đặt làm giá trị mới. – raveren