Для MySQLi вы не можете передавать константу, такую как NULL или 0, или даже "NULL" в качестве аргумента bind_param ().
Все передаваемые данные должны быть ссылочного типа.Это глупое ограничение, я знаю.
Но обойти это легко.Просто создайте одноразовую переменную.В проекте, над которым я работал, мне нужно было вставить некоторые данные в поле BLOB.К сожалению, MySQLi не позволяет вам связывать двоичные данные, если они длиннее определенной длины.Вы должны связать NULL и затем продолжить отправку двоичной информации через send_long_data () .
Но, опять же, вы не можетесвяжите константу как NULL, поэтому в примере посмотрите, где я использовал переменную $ Dummy .
$InfoToInsert = array
(
'a number' => 9000,
'a double' => 9000.0,
'a string' => 'Hello World',
'a blob' => gzdeflate('Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed')
);
$Stmnt =
(
'INSERT INTO _mytable '.
'(_myintcol, _mydoublecol _mystringcol, _myblobcol) '.
'VALUES '.
'(?, ?, ?, ?)'
);
if(!$PreparedStmnt = $Conn->prepare($Stmnt))
{
$OutputError = 'Failure preparing statement: '.my_SanitizeHtml($Conn->error).'<br /><br />Full query:<br />'.$Stmnt;
$Conn->rollback();
$Conn->close();
return(false);
}
$Dummy = null;
$PreparedStmnt->bind_param
(
'idsb', // Possible types:
// i for Integer
// d for Double
// s for String
// b for BLOB
$InfoToInsert['a number'], // _myintcol
$InfoToInsert['a double'], // _mydoublecol
$InfoToInsert['a string'], // _mystringcol
$Dummy // _myblobcol
);
$PreparedStmnt->send_long_data(3, $InfoToInsert['a blob']); // 3 because it's the 4th parameter (-1 for zero-based)
if(!$PreparedStmnt->execute())
{
$OutputError = 'Failure inserting report: '.my_SanitizeHtml($Conn->error);
$PreparedStmnt->close();
$Conn->rollback();
$Conn->close();
return(false);
}
$PreparedStmnt->close();