$user='root';
try{
$pdo=new PDO('mysql:host=localhost;dbname=test',$user);
$pdo->exec('set character set utf8');
}
catch(PDOException $e){
echo 'Error: '.$e->getMessage();
}
//using bound variables?
$stmt=$pdo->prepare('insert into test(name) value(:name)');
$stmt->bindParam(':name',$_POST['name']);
$stmt->execute();
//using named parameters
$stmt=$pdo->prepare('insert into test(name) value(:name)');
$stmt->execute(array(':name'=>$_POST['name']));
//using placeholders
$stmt=$pdo->prepare('insert into test(name) value(?)');
$stmt->execute(array($_POST['name']));
//using bound parameters w/ placeholders
$stmt=$pdo->prepare('insert into test(name) value(?)');
$stmt->bindParam($_POST['name']);
$stmt->execute();
我只是想知道什么是最适合我作为PHP启动器,我只是混淆了什么使用,我想知道什么是最好和常用。
答案 0 :(得分:5)
我发现第二种方法最好:
//using named parameters
$stmt=$pdo->prepare('insert into test(name) value(:name)');
$stmt->execute(array(':name'=>$_POST['name']));
你已经命名了params,所以你知道数组中的内容是什么 - 我讨厌在代码中查看五个或更多?
并尝试计算顺序是否合适,并且它需要更少的行代码抛出一个数组并同时执行所有代码而不是通过许多->bindParam()
行。
如果这个选项不在桌面上,我会通过->bindParam()
的许多行而不是其他行。
这个问题归结为个人偏好。选择最适合您的内容,易于阅读和理解的内容(特别是如果您在几周或几个月后再回过头来看)以及其他人可能需要通过代码轻松阅读的内容调试它。
编辑:没有什么比这更快更快。将查询放在一起可能会以某种方式延长毫秒,但查询将花费相同的时间在数据库上执行。真的不是在这里看得更快。
答案 1 :(得分:2)
答案归结为一件事 - 个人偏好。它们都按预期工作并且同样给出相同的结果,但“你如何编写它”完全取决于你更熟悉的东西 - 以及可能(最终)也可以使用你的代码的其他人。
我个人认为,我认为命名参数是最好的,因为它非常清楚你所设定的价值。在查询中使用单个参数,它可能毫无意义 - 但是当有10个以上时,它可以派上用场。
答案 2 :(得分:1)
就个人而言,我更喜欢四个中的第一个。很清楚你在做什么,所以你的代码将更容易维护。当数组已经存在时,使用数组很有用,并且所有值都将在查询中使用。但是,在编写代码时,将面临错误。调试使用?
占位符的查询可能很麻烦。
在性能方面,4种方法中的任何一种方法都没有太大差异,但存在一些差异:
在4个示例中的2个中,您正在创建一个数组。创建数组很便宜,但不是免费的。
使用bindParam
时,您可以轻松指定数据类型(只需浏览PDO预定义的constanstants)。大多数情况下,这不会产生很大的差异,但在正在进行全表扫描的情况下,通常最好不要让MySQL进行类型转换。
所以在性能方面:如果你不需要,不要构造新的数组,如果可能的话,设置正确的数据类型。
关于代码质量:命名参数通常会让您的生活更轻松,所以我建议您尽可能多地使用它们