我正在研究一个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中语句对象的正常行为?
因为我认为这是一个错误,而不是一个功能。
答案 0 :(得分:2)
mysqli_stmt_bind_param()
不会验证您的数据,它会强制数据类型化。您需要验证您的数据是否符合预期。