我正在尝试一个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()
不会验证您的数据,而是将数据强制为一种类型。您需要验证数据是否符合您的期望。