我正在尝试一个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中语句对象的正常行为?
因为我很清楚地将其视为错误而不是功能。

最佳答案

mysqli_stmt_bind_param()不会验证您的数据,而是将数据强制为一种类型。您需要验证数据是否符合您的期望。

10-05 20:55