mysqli bind_param не устанавливает ошибку $ stmt-> или $ stmt-> errno

Согласно руководству php вы можете получить ошибки в любом подготовленном методе оператора, опросив $ stmt-> error и $ stmt-> errno, однако метод bind_param никогда не устанавливает эти ошибки, может ли кто-нибудь еще подтвердить это? или скажите мне, что я пропущу, пожалуйста?

Например:

echo "Start\n"; $db = new mysqli('localhost','test','xxxxxx','test'); $val = 1; $st = $db->prepare('insert into tblTest set field1=?'); if($st == false) { printf("prepare: %s %d\n",$db->error,$st->errno); } $rs = $st->bind_param('is', $val); if($rs == false) { printf("bind_param: %s %d\n",$st->error,$st->errno); } $rs = $st->execute(); if($rs == false) { printf("execute: %s %d\n",$st->error,$st->errno); } $rs = $st->close(); if($rs == false) { printf("close: %s %d\n",$st->error,$st->errno); } echo "Finish\n"; 

Выполнение приведенного выше из командной строки:

 Start PHP Warning: mysqli_stmt::bind_param(): Number of elements in type definition string doesn't match number of bind variables in test.php on line 14 bind_param: 0 execute: No data supplied for parameters in prepared statement 2031 Finish 

Таким образом, php видит это как предупреждение, bind_param возвращает false, но error & errno не заданы. execute также не работает и правильно установил ошибку & errno

Это ошибка?

MySQLi::error и MySQLi::errno являются контейнерами для кодов ошибок и сообщений, возвращаемых RDBMS на PHP, а не для ошибок, встречающихся в PHP-коде при настройке оператора. Неправильный вызов функции bind_param() (с недостаточными параметрами), по-видимому, не связывается с РСУБД и, следовательно, не получит его ошибку из СУБД.

Согласно документам , bind_param() возвращает логический FALSE при bind_param() . Поэтому вам нужно будет убедиться, что он был вызван успешно.

 $rs = $st->bind_param('is', $val); if ($rs) { $st->execute(); }