sql server - Why does this query work in SQL management studio but not php through mssql? -


i use mssql on php 5.5.25 running on mac.

the query

update sessions set             userid = 0,             clientip = '127.0.0.1',             timestamp = 1436465436,             sessiondata = 'a:1:{s:5:"forms";a:1:{s:26:"login_user_form-1436465436";o:4:"form":15:{s:10:"*form_id";s:15:"login_user_form";s:9:"*gen_id";s:26:"login_user_form-1436465436";s:13:"*form_items";a:4:{s:8:"username";o:17:"formitemtextfield":22:{s:9:"*length";i:60;s:7:"*mask";s:0:"";s:13:"*input_type";s:6:"string";s:12:"*max_value";n;s:12:"*min_value";n;s:7:"*type";s:9:"textfield";s:7:"*name";s:8:"username";s:8:"*value";n;s:7:"*size";i:30;s:11:"*disabled";b:0;s:10:"*form_id";s:15:"login_user_form";s:8:"*print";b:1;s:8:"*label";s:8:"username";s:14:"*placeholder";s:0:"";s:14:"*description";n;s:9:"*weight";i:0;s:9:"*parent";s:13:"primary_group";s:11:"*required";b:1;s:10:"*classes";a:0:{}s:9:"*dbname";s:8:"username";s:15:"*token_prefix";s:1:":";s:18:"*format_callback";b:0;}s:8:"password";o:16:"formitempassword":24:{s:13:"*min_length";i:0;s:13:"*validation";b:1;s:9:"*length";i:100;s:7:"*mask";s:0:"";s:13:"*input_type";s:6:"string";s:12:"*max_value";n;s:12:"*min_value";n;s:7:"*type";s:8:"password";s:7:"*name";s:8:"password";s:8:"*value";n;s:7:"*size";i:30;s:11:"*disabled";b:0;s:10:"*form_id";s:15:"login_user_form";s:8:"*print";b:1;s:8:"*label";s:8:"password";s:14:"*placeholder";s:0:"";s:14:"*description";s:56:"i forgot password.";s:9:"*weight";i:1;s:9:"*parent";s:13:"primary_group";s:11:"*required";b:1;s:10:"*classes";a:0:{}s:9:"*dbname";s:8:"password";s:15:"*token_prefix";s:1:":";s:18:"*format_callback";b:0;}s:7:"form_id";o:14:"formitemhidden":18:{s:12:"*read_only";b:1;s:7:"*type";s:6:"hidden";s:7:"*name";s:7:"form_id";s:8:"*value";s:26:"login_user_form-1436465436";s:7:"*size";n;s:11:"*disabled";b:0;s:10:"*form_id";s:15:"login_user_form";s:8:"*print";b:1;s:8:"*label";s:6:"";s:14:"*placeholder";s:0:"";s:14:"*description";n;s:9:"*weight";i:2;s:9:"*parent";s:13:"primary_group";s:11:"*required";b:0;s:10:"*classes";a:0:{}s:9:"*dbname";s:7:"form_id";s:15:"*token_prefix";s:1:":";s:18:"*format_callback";b:0;}s:6:"submit";o:20:"formitembuttonsubmit":18:{s:14:"*form_action";n;s:7:"*type";s:6:"submit";s:7:"*name";s:6:"submit";s:8:"*value";s:6:"submit";s:7:"*size";n;s:11:"*disabled";b:0;s:10:"*form_id";s:15:"login_user_form";s:8:"*print";b:1;s:8:"*label";s:6:"";s:14:"*placeholder";s:0:"";s:14:"*description";n;s:9:"*weight";i:3;s:9:"*parent";s:13:"primary_group";s:11:"*required";b:0;s:10:"*classes";a:0:{}s:9:"*dbname";s:6:"submit";s:15:"*token_prefix";s:1:":";s:18:"*format_callback";b:0;}}s:9:"*action";s:14:"/demo001/login";s:9:"*method";s:4:"post";s:8:"*title";s:0:"";s:9:"*submit";b:1;s:10:"*enctype";s:33:"application/x-www-form-urlencoded";s:13:"*title_type";s:2:"h1";s:12:"*db_values";b:0;s:10:"*gentime";i:1436465436;s:20:"*validation_errors";a:0:{}s:20:"*validate_callback";s:19:"login_user_validate";s:18:"*submit_callback";s:17:"login_user_submit";s:10:"*classes";s:0:"";}}}'           sessionid = 'krd682btg38st6r5i0om1gpbj4' 

the warning mssql_get_last_message() is:

incorrect syntax near 'a:1:{s:5:"forms";a:1:{s:26:"login_user_form-1436465436";o:4:"form":15:{s:10:"'. 

however if run above query in sql server management studio executes fine.

obviously sessiondata serialized array. other serialized arrays save fine elsewhere in system using same syntax. missing?

since several comments requested it, here how query generated: see pastebin

so found problem. hidden characters in serialized string. null characters "\0" being interpreted sql server terminator query string. updated sanitize function include line after single quote encode:

$string = str_replace("\0",'[null]',$string); 

fixed problem right up.

of course since occuring in string need undo after read

str_replace('[null]', "\0", $string); 

Comments