HackerOne users: Testing against this community violates our program's Terms of Service and will result in your bounty being denied.
Vanilla Doesn't Work Well in MySQL Strict Mode
PHP Version 5.2.17, MySQL server 5.5.15, SQL mode set to strict:
On "Manage Users" dashboard page when I modify some user with "Banned" checkbox unchecked, I get the message:
which obviously means that value bound to :Banned parameter is empty instead of integer, as expected by MySQL in strict mode. When saving user with "Banned" checkbox checked, update works fine (because checkbox value = 1).
Strict mode can be checked out either by adding to my.ini, section [mysqld] the setting:
or by issuing the query after connecting to the database:
STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
On "Manage Users" dashboard page when I modify some user with "Banned" checkbox unchecked, I get the message:
Incorrect integer value: '' for column 'Banned' at row 1|Gdn_Database|
Query|update GDN_User User set
Email = :Email, Name = :Name, ShowEmail = :ShowEmail,
DateUpdated = :DateUpdated, UpdateIPAddress = :UpdateIPAddress,
Banned = :Banned where UserID = :UserID
which obviously means that value bound to :Banned parameter is empty instead of integer, as expected by MySQL in strict mode. When saving user with "Banned" checkbox checked, update works fine (because checkbox value = 1).
Strict mode can be checked out either by adding to my.ini, section [mysqld] the setting:
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
or by issuing the query after connecting to the database:
SET SESSION sql_mode='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
Tagged:
0
Comments
Vanilla Wiki, Tastes Great! 31,000 viewers can't be wrong. || Plugin Development Explained
Vanilla Wiki, Tastes Great! 31,000 viewers can't be wrong. || Plugin Development Explained
There was an error rendering this rich post.
Do you guys really write code against a non-strict MySql db? Isn't that a bit hackish and dangerous (for this reason alone?)
We really do write code against non-strict MySql. It is the way MySQL seems to be installed by default.
Sorry for hijacking this convo btw - I've had many many issues and once I found this and turned off strict, they all went away. I had issues ranging from activating themes to setting up roles and users to setting custom category access. My MySQL defaulted to strict. Seems like programming against strict would cut out issues that you could potentially prevent. Not to mention making your SQL more compliant for when/if you ever determine to support MSSQL or other DB servers.
Anyway, sorry for the mini-rant.
I take your point and I think that the two MySQL modes are something we didn't know too much about when developing Vanilla. We had installed Vanilla on a tonne of different setups and webhosts without them having MySQL strict too. I was made aware of the mode maybe sometime this summer and I tried going through the app a bit, but you know how things get a little too far gone once a significant amount of programming has occurred.
I think the thing is php itself is sort of like an unstrict MySQL. What I mean is:
To me, this is a good thing because at some point most data on the web is coming in as a string. I've learned to love the way php works, even though it drove me crazy as a 'hacker' language when I first started with it. Working with unstrict MySQL sort of dovetails into php naturally this way.
So there you go, this is how I stopped worrying and learned to love unstrict MySQL.
Hi all. I am new here.
And i was made next fix.
open file
applications/dashboard/controllers/class.profilecontroller.php
find line 769, or
public function Save($FormPostValues, $Settings = FALSE) {
add new line after {
insert next code
$FormPostValues['Banned'] = (integer)($FormPostValues['Banned']);
maybe this is not good solution, but it works for me.
Hi guys. After a few hours of working on this, I still can't figure out the work around. Anyone have any suggestions? All of the suggestions I have found in the community don't seem to work for me.
The fix is easy. In MySQL.ini
find:
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
change it to:
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Thanks Gary, I tried that and it is still throwing that error. I can't register anyone.
Did you restart the MySQL service?
Yes Gary. It is really perplexing. I thought for sure that would have been it.
I had the same problem, and have tried this fix and its worked, and its also fixed a problem i was having with one of the other moduals as well
I just want to start a new forum and I was wondering if vanilla could fit my needs. I was trying to manage user and give moderator rights (in dashboard /manage users) and I get this error:
Incorrect integer value: '' for column 'Banned' at row 1.
I read that the solution is to set sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
but I am new to mysql, how and where can I do that?
I have vanilla 2-0-18-10 and mysql 5.6.14
By the way It's quite disappointing to see that the problem is here since November 2011 and it's not solved yet.
It's not a "problem" slated to be fixed. We don't support strict mode.
Actually kind of disappointing to see you disappointed when it is solved!!!!! You just have to read and follow instructions.
but there is a solution if you read the comment closely. and then you google mysql.ini to learn about google and mysql and mysql.ini and setting mysql parameters, which is not vanilla.
there is a mysql forum as well.
http://vanillaforums.org/discussion/comment/173675/#Comment_173675
I may not provide the completed solution you might desire, but I do try to provide honest suggestions to help you solve your issue.
How could you say it is solved ?
A solution is proposed here in this thread, but it's not explained how to do it.
I have no idea how to set sql-mode in mysql.ini as there is no mysql.ini or my.ini file anywhere on my computer.
I suggest that the correct solution for this problem could be one of:
Unfortunately you don't get my point. I am currently evaluating which forum software I will use between vanilla, phpbb, mybb, smf for my new forum. I have just installed fresh version of mysql and each of the forum software I have just mention and I am checking all the basic features I need.
A very basic feature like giving moderators rights does not work with a fresh installation of vanilla.
FYI
I found a real fix that works without playing with mysql config here: https://github.com/iignatov/Garden/commit/b65498d61795a6922f2cb1b4b2cf27000efccf82