mysqli_stmt_bind_param:类型不匹配不会引发错误

时间:2013-12-10 16:16:42

标签: php mysql mysqli

我正在研究一个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_stmt_execute($stmt)返回FALSE并失败,但不会在整数字段中插入125。

我做错了什么或者它是PHP + MySQL中语句对象的正常行为?
因为我认为这是一个错误,而不是一个功能。

1 个答案:

答案 0 :(得分:2)

mysqli_stmt_bind_param()不会验证您的数据,它会强制数据类型化。您需要验证您的数据是否符合预期。