我正在使用类准备 mysql 配置设置。我对此很困惑。我总是使用bindParam。也可以使用数组插入。我的意思是,数组和绑定(bind)参数之间有什么区别。
例如数组
$query = $db->prepare("INSERT INTO users SET
username = :uname,
password = :upass,
email = :umail");
$insert = $query->execute(array(
"upass" => "123456",
"umail" => "user@user.com",
"uname" => "username",
));
if ( $insert ){
$last_id = $db->lastInsertId();
}
例如
$stmt = $this -> db_conn -> prepare("INSERT into users(username, password) VALUES(:uname, :upass)");
$stmt -> bindParam(':uname', $username);
$stmt -> bindParam(':upass', $password);
$stmt -> execute();
最佳答案
考虑到使用execute
您无法选择数据类型(它始终是PDO::PARAM_STR
)这一事实,两者之间只有一个主要区别(来自核)。 PDOStatement::bindParam通过引用而 PDOStatement::execute不是。 PDOStatement::execute在内部执行与 PDOStatement::bindValue 相同的操作,但是两次。
内部(C 语言),bindValue
calls与执行
calls 相同的方法。调用的方法名称是really_register_bound_param .
另一方面,bindParam
calls其他方法称为 register_bound_param .
这意味着bindValue
多次调用execute
调用的同一个方法,而bindParam调用一个方法来绑定(bind)作为引用,并且只“真正注册”参数当execute
被调用时。
考虑通过引用绑定(bind),只能使用bindParam
:
//fictional code
$stmt= $pdo->prepare("INSERT INTO table (column) VALUES (:value)");
$stmt->bindParam(":value", $randomValue);
for($i = 0 ; $i < 1000; $i))
{ $randomValue = rand(1000,1000000);
$stmt->execute();
}
值得吗?也许当while
进行带有多个参数的复杂插入时,可以减少重新绑定(bind)新参数或大量参数的开销。
关于php - mysql插入数据时数组使用和bindParam使用有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43812719/