Monthly Archives: August 2010

SQLSTATE[HY093]: Invalid parameter number: no parameters were bound

Một lỗi củ chuối vừa bị dính ngày hôm qua.
Chuỗi sql:

1
2
3
$value = $this->_db->quote($value); // output like ' test? \' special characters'
$query = "UPDATE table_abc SET field_def = $value WHERE field_xyz = 123";
$this->_db->query($query);

Nếu chạy PHP phiên bản thấp hơn 5.2.7 thì sẽ bị lỗi SQLSTATE[HY093]: Invalid parameter number: no parameters were bound, do PDO parse sai placeholder dẫn đến bind param sai toét. Lỗi này xảy ra khi execute trực tiếp câu lệnh sql mà trong value của nó chứa đồng thời 2 ký tự question mark (?) và single quote (‘)

Trong ZF thì khắc phục đơn giản bằng cách sử dung Zend_Db update method (làm bừa nó lại ngon :( )

1
2
$data = array('field_def' => $value);
$this->_db->update('table_abc', $data, 'field_xyz = 123');

[Bổ sung]
Ở đoạn code trên là xử lý cho trường hợp UPDATE, nếu trong trường hợp SELECT thì vẫn bị lỗi bind param, mặc dù dùng Zend_Db_Select. Cách giải quyết cực kỳ đơn giản, có thể fix được cho cả trường hợp UPDATE, đó là thay đổi lại setting của Zend_Db để nó không tự động bind param nữa:

1
$this->_db->getConnection()->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, false);

=======================================================
1.^ Lỗi cụ thể xem tại: http://bugs.php.net/44251
2.^ http://www.php.net/ChangeLog-5.php, section 5.2.7
3.^ http://framework.zend.com/issues/browse/ZF-1343

If you want it done right, you don’t have to do it yourself!

Sáng nay, sau 2 ngày kể từ khi đặt mua sách ở Vinabook (đây là lần thứ 2 mình mua) cuối cùng mình đã nhận được 4 quyển sách thơm phức mùi giấy mực :p Thật ra mình cũng không khoái đọc những kiểu sách như thế này nhưng khi đọc lướt qua 2 cuốn: Người giỏi không phải là người làm tất cả & Người thông minh giải quyết vấn đề như thế nào thì mình thực sực thấy chính… hình ảnh của mình trong đó :(

Tối nay mình chọn đọc cuốn Người giỏi không phải là người làm tất cả trước. Lâu lắm mới có hứng thú đọc sách đến như vậy. Sau khi tập thể dục & tắm rửa cơm nước xong là đọc ngấu nghiến. Quả thực những vấn đề cuốn sách nêu ra rất đúng với hoàn cảnh của mình (mặc dù mình không phải là quản lý :p). Đã đến lúc phải thay đổi để cho công việc trở nên dễ thở hơn rồi (tạm thời lúc này lầ công việc đã – những mục tiêu ngắn hạn có vẻ dễ hoàn thành hơn :))

Đây là hình chụp 4 cuốn mình đã mua ^^

Hôm nay nghỉ sớm để mai chiến đấu nốt mớ việc còn dang dở. Đọc xong mấy tập Truyền nhân Atula rồi đi ngủ thôi. Ôi cuối tuần :awww:

Những con khỉ không hỏi tại sao

Có một câu chuyện xưa lắm, xưa đến nỗi anh không nhớ là ai đã kể cho anh nghe và lúc nào, chỉ nhớ là nó liên quan đến vài con khỉ, một cái chuồng, một trái chuối và một bình chữa lửa.

Em xây một cái chuồng rộng cỡ cái phòng ngủ, và lùa năm con khỉ vào một phía. Phía còn lại em để một trái chuối. Rồi em cầm bình chữa lửa đứng đợi. Khỉ thì thích ăn chuối, nên không sớm thì muộn, một trong những con khỉ sẽ bắt đầu chạy về phía trái chuối. Khi nó làm như thế, em lấy bình chữa lửa xịt vào những con khỉ còn lại. Thay trái chuối mới nếu cần, và lặp lại quá trình này. Continue reading