以下准备好的陈述之间是否有任何重大差异?哪一个更优选,如果是这样的话?
1:
$stmt = $db->prepare("INSERT INTO users(userName) VALUES (:user)");
$user = "Steve";
$stmt->bindParam(':user', $user);
$stmt->execute();
2:
$stmt2 = $db->prepare('INSERT into users(userName) VALUES(:user)');
$stmt2->execute(array(':user'=>'Steve'));
答案 0 :(得分:4)
bindParam
将变量参数作为引用。这意味着可以修改变量值,具体取决于你所做的事情(比如调用一个改变传递给它的变量值的存储过程)。
这就是你应该使用bindValue
的原因,除非你期望MySQL改变变量的值。
只有实际的MAJOR区别在于,如果使用第二个场景,则无法指定变量类型。每个参数都被视为一个字符串,而使用bindParam
/ bindValue
时,您可以自由定义参数是字符串还是整数。