By default, DBI treats data as strings and tries to bind them as VARCHAR variables.
This works quite well for most data types, but poses a problem for binary types such as binary large object (BLOB) values.
To ask DBI to explicitly bind an input value as a specific type:
#!/usr/bin/perl
use strict;
use warnings;
use DBI qw/:sql_types/;
use CGI;
use mydb qw/db_connect/;

my $conn = db_connect();

my $sql = q{
	INSERT INTO menu.pictures(id, picture)
	VALUES (?, ?)
};

# Prepare the statement
my $stmt = $conn->prepare($sql);

# Create a variable to hold the item ID
my $menu_number = 1;

# Bind the ID as an input parameter
$stmt->bind_param(1, $menu_number, { TYPE => SQL_INTEGER });

# Create a variable with the location of our BLOB file
my $menu_pic = '/home/lynn/burger.png';

# Bind the BLOB as an input parameter, setting the db2_file attribute to true
$stmt->bind_param(2, $menu_pic, { db2_file => 1 });

# Execute the statement
my $result = $stmt->execute();

# Check the results of the statement and print success or failure message
if ($result) {
	print "Successfully inserted a picture into the menu.";
}
else {
	print "Failed with the following error: " . $conn->errstr;
}