Why is this blob saving when used as a concatenated string but not as a prepared statement
The bind_param page mentions (emphasis mine) for the types parameter that 


  corresponding variable is a blob and will be sent in packets


which is done in this manner:

$null = NULL;
$stmt-&gt;bind_param('sbiiissi', $input[1], $null, $input[3],
         $input[4], $input[5], $input[6],
         $DateAdded, $_SESSION[$thisTracker]);
$stmt-&gt;send_long_data(1, $input[2]);


If your BLOB data exceeds the max_allowed_packet size you will need to call send_long_data multiple times, sending a smaller fragment of it each time.

More info in this Oracle blog.