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

August 26th, 2010

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!

August 20th, 2010

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

August 9th, 2010

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. Read the rest of this entry »

Chém gió

July 31st, 2010

Hôm nay có người “bóc mẽ” mình vì lần chat trước mình “ba hoa bốc phét” về mấy giai đoạn trong quá trình cưa cẩm, yêu đương (dựa trên bài viết này) :o Mặc dù mình ko nói nguồn gốc xuất xứ, vì đang bốc phét mà, chỉ lấy 6 cái headline đó ra để “chém” thôi, phải cưa cẩm thế nào, yêu đương ra sao… nhưng tuyệt nhiên mình chẳng bảo mình là tác giả :D

Vấn đề ở chỗ: hôm nay người đó lại được 1 người gửi cho cái link với nội dung tương tự bài viết “6 giai đoạn của người học lập trình” (tiêu đề bài viết là do mình tự đặt, vì đây là nội dung anh Phạm Công Định reply trong 1 topic của 4rum), và người gửi link còn bảo là bạn ý dịch lại từ 1 “thằng” lập trình viên nào đó ở nước ngoài :D Oh yeah!!! Thật là hơi bị lố bịch khi bảo tự dịch lại, bởi đơn giản là tiếng Việt bạn ấy nói còn ngọng nữa là dịch tiếng Anh (tạm cho là tiếng Anh đi). Thật không thể hiểu được tại sao bạn ý lại bảo bạn ý dịch khi mà:
- Cuối bài viết bạn ý viết là: theo zonotek
- Trong bài viết của bạn ý vẫn còn link đến các dẫn chứng, ví dụ của tác giả
- Các lỗi chính tả (gõ thiếu dấu) vẫn y hệt như trên bài viết gốc

Tuy nhiên mình cũng hơi băn khoăn, liệu anh Định có dịch lại từ nguồn khác hay không? Đơn giản là đi hỏi ông Google, chỉ ra được đúng 1 bài “Six Stages for Learning to Use Technology” & bài này chẳng liên quan gì hết đến bài viết của anh Định. Tin tưởng 99% rồi, lại thấy Mr Định đang online, nhưng ko thấy set status, chắc đang code trong phiêu du nên ngập ngừng mãi (khoảng hơn 2 tiếng) mới dám nhảy vào hỏi. Chốt lại là anh ấy tự viết ~~> thần tượng vẫn không bị sụp đổ hehe :p

Qua vụ này mới càng khẳng định, việc “tôn trọng” chất xám của người khác bị mấy anh chém gió chém cho tả tơi mất rồi :chef:

Cách đối phó với những đồng nghiệp “gây khó chịu”

July 24th, 2010

Mấy hôm trước tự nhiên mò vào Spam folder của Gmail thấy có bài viết này khá hay, copy lên blog chia sẻ với mọi người. Có vẻ như tình trạng này khá phổ biến nhỉ? :rolleyes:

Thời gian bạn làm việc tại công ty có thể còn nhiều hơn thời gian bạn ở nhà. Vì vậy, môi trường công ty gần như là ngôi nhà thứ hai của bạn, và đồng nghiệp là những thành viên trong gia đình ấy. Tất nhiên, trong đại gia đình đó sẽ có những người làm bạn dễ chịu và ngược lại. Thế bạn đã biết cách ứng phó với những thành viên gây phiền hà này chưa? Read the rest of this entry »