Tôi thường phát triển với một máy chủ trực tiếp, nhưng lần đầu tiên tôi nghĩ mình sẽ thực hiện bước nhảy vọt và xem liệu tôi có thể nhận được tất cả mã mysql (C++) của tôi hoạt động như một máy chủ nhúng hay không. Đặc biệt, tôi rất thích các phát biểu chuẩn bị như họ (IMHO) "nói chung" vượt trội so với giống không chuẩn bị.Các câu lệnh chuẩn bị được hỗ trợ trong MySQL nhúng
Tôi đã thử sử dụng libmysqld từ 5.5.22 và libmysqld từ 5.6.4 và không hoạt động.
Kết nối được thực hiện, các lệnh mysql_query/mysql_real_query đơn giản hoạt động tốt, nhưng ngay sau khi câu lệnh được chuẩn bị đầu tiên của tôi phát ra một mysql_stmt_fetch(), tôi nhận được các lệnh 'ghét' không đồng bộ '.
Sự cố tương tự xuất hiện trên diễn đàn oracles (http://forums.mysql.com/read.php?168,507863,507863#msg-507863) mà không có độ phân giải.
Tôi không thấy, cũng không tin rằng tôi thiếu bất kỳ lệnh nào giữa mysql_real_connect() và mysql_stmt_fetch().
Tất cả các tìm kiếm của tôi đều trống cho bất kỳ ví dụ nào của máy chủ nhúng đang sử dụng câu lệnh đã chuẩn bị. Tôi cũng không tìm thấy một câu thực sự "bạn không thể làm điều này".
Vì vậy ... có hoặc không được hỗ trợ không?
Cảm ơn sự thông cảm của bạn.
// chỉnh sửa để làm sáng tỏ hơn nữa này (và hướng dẫn nếu cần thiết) đầy đủ chuỗi mysql cmd của tôi là như sau:
mysql_library_init(); // as embedded
mysql_init();
mysql_options(MYSQL_SET_CHARSET_NAME); //to utf8
mysql_options(MYSQL_OPT_USE_EMBEDDED_CONNECTION);
mysql_real_connect();
mysql_real_query("SET NAMES 'utf8'");
mysql_real_query("SET CHARACTER SET 'utf8'");
mysql_set_character_set("utf8"); // yes, you really do need to set utf8 four times
mysql_autocommit(mAutocommit);
vào thời điểm này, mysql_real_query() cuộc gọi DO làm việc. Tôi tiếp tục ...
//all this would only happen once for each stmt
{
mysql_stmt_init();
mysql_stmt_prepare(theQuery);
mysql_stmt_param_count(); // to assert input bind object (aka the predicates) has the same number of params as theQuery
mysql_stmt_result_metadata()
mysql_num_fields(); // to assert the output bind object has the same number of params as theQuery
mysql_free_result(metadata);
mysql_stmt_bind_param(); // called IF there are input params
mysql_stmt_bind_result(); // pretty much always called for the output params
}
// and at last
mysql_stmt_execute();
//mysql_stmt_store_result(); //{OPTIONAL: use if you want to buffer the fetch - I dont}
mysql_stmt_fetch(); // ERROR! commands out of sync.
// and for completeness,
mysql_stmt_free_result();
mysql_stmt_close();
// and the shutdown
mysql_close();
mysql_library_end();
Cảm ơn sự giúp đỡ của bạn. Câu hỏi của tôi không dựa trên giá trị của các câu lệnh đã chuẩn bị mà dựa trên thông tin liên quan đến việc chúng có hoạt động với thư viện mysql được nhúng (tức là không có máy chủ bên ngoài) hay không. Đối với tôi, họ KHÔNG làm việc. thứ hai, gọi mysql_stmt_store_result không liên quan. Để bạn tham khảo, hãy xem: http://dev.mysql.com/doc/refman/5.5/en/mysql-stmt-store-result.html nếu bạn không đệm tìm nạp (mà tôi KHÔNG), thì bạn KHÔNG cần phải gọi cửa hàng (mà tôi không). Không có gì-ít, chỉ để xem, tôi đã thử đề xuất của bạn và không đồng bộ xảy ra tại lệnh cửa hàng. –