mysql编写的语句我应该使用哪种语句

时间:2014-02-07 15:30:12

标签: mysql prepared-statement

以下准备好的陈述之间是否有任何重大差异?哪一个更优选,如果是这样的话?

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'));

1 个答案:

答案 0 :(得分:4)

bindParam将变量参数作为引用。这意味着可以修改变量值,具体取决于你所做的事情(比如调用一个改变传递给它的变量值的存储过程)。

这就是你应该使用bindValue的原因,除非你期望MySQL改变变量的值。

只有实际的MAJOR区别在于,如果使用第二个场景,则无法指定变量类型。每个参数都被视为一个字符串,而使用bindParam / bindValue时,您可以自由定义参数是字符串还是整数。

那么你应该使用什么呢?好吧,都没错。如果您在插入大量字符串数据时发现使用第二种方法更容易,那么它没有任何问题。