勉強目的などで生でsqliteを触りたい人用情報となります。
そもそもQSQLを使えばこんな問題は起きないという。。。
↓こんな感じになります(.constData()はなくても大丈夫かも)。
sqlite3_bind_text(stmt, 1, m_userID.toUtf8().constData(), -1, SQLITE_TRANSIENT); // m_userIDはQString型
sqlite3では文字列はutf-8で受け取るため、受け渡したいQStringをtoUtf8()で変換します。
また、この変換された文字列は一時的なものなので、SQL文の実行時まで保持されないようです。
その場合はsqlite3_bind_textの末尾のオプションでSQLITE_TRANSIENTを指定し、
sqlite側にこの文字列をコピーして持っておくように伝えておく必要があります。
sqliteのサンプルではよくSQLITE_STATICが指定されていますが、
こちらを指定するとおかしな文字列がDBに保存されてしまいます。