Php mysqli_stmt_bind_参数:类型不匹配不会引发错误

Php mysqli_stmt_bind_参数:类型不匹配不会引发错误,php,mysql,mysqli,Php,Mysql,Mysqli,我正在开发一个php应用程序,我尝试并成功地将mysqli与该函数结合使用: function executeUpdateInsert($SQLStatement, $SQLBindString, $bindValueArray){ $ret = -1; $dbConnection = getDbConnection(); $stmt = mysqli_prepare( $dbConnection, $SQLStatement); $bindParamArray = array_merge(a

我正在开发一个php应用程序,我尝试并成功地将mysqli与该函数结合使用:

function executeUpdateInsert($SQLStatement, $SQLBindString, $bindValueArray){
$ret = -1;
$dbConnection = getDbConnection();
$stmt =  mysqli_prepare( $dbConnection, $SQLStatement);
$bindParamArray = array_merge(array($stmt, $SQLBindString), $bindValueArray );
call_user_func_array ( mysqli_stmt_bind_param , $bindParamArray );

if( mysqli_stmt_execute($stmt) ) {
    $ret = mysqli_insert_id ($dbConnection);    
    mysqli_stmt_close($stmt);
    $dbConnection->close();
}else{
    mysqli_stmt_close($stmt);
    $dbConnection->close();
}
return $ret;
}
函数调用如下所示:

executeUpdateInsert( "UPDATE mytable(int1, int2, string2)VALUES (?,?,?)", "iis", array ( 12,42,"string") ) );
这实际上是可行的,尽管当我尝试在数据库中插入非整数(如
125r896
值)时,我发现了一种非常奇怪的行为。在一个完美的世界里,我希望mysqli\u stmt\u执行($stmt)返回
FALSE
并失败,但它不会在整数字段中插入125

是我做的不对还是PHP+MySQL中语句对象的正常行为?

因为我清楚地认为这是一个bug而不是一个特性。

mysqli\u stmt\u bind\u param()
不会验证数据,它会将数据强制为一个类型。您需要验证您的数据是否符合预期。

它将值
125r896
转换为int,这将为您提供125。我绝对讨厌PHP。谢谢。如果您需要数据验证,您可能需要一个类似或的ORM。它越小,使用ORM就越容易。