php - mysql插入数据时数组使用和bindParam使用有什么区别?

标签 php mysql arrays

我正在使用类准备 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/

相关文章:

php - 联系表7数据库扩展查询

Windows 上的 PHP_BINDIR 不正确?

arrays - 获取 bash 数组的所有元素,除了第一个

innodb - mysqldump 不锁定表和数据完整性

Java:通过注释检查列表中是否存在属性值

javascript - 错误:Object is not a function for returning an array to my callback function

php - 大文件无法上传

php - Codeception 在 Symfony 4 中找不到 Kernel.php

php - 具有多个输入的 Laravel 高级查询

php - 带PHP和Mysql的收件箱和发件箱系统