PDO:何时使用bindParam,执行(数组))和PDO :: FETCH_ASSOC?

时间:2015-07-03 09:35:37

标签: php pdo

我是PDO的新手,事实上,这是我第一次使用它。我一直在使用被折旧的mysql。最近,我尝试更新我的所有网站以使用PDO,根据我从互联网上找到的许多来源,PDO更好,更安全。

但是,这些教程让我更加好奇,充满了疑问。我一整天都在谷歌上,但我仍然无法得到最好的答案或例子。

让我们从下面的代码开始,

// query
$sql = "SELECT title FROM books ORDER BY title";
$q   = $conn->query($sql);
$q->setFetchMode(PDO::FETCH_ASSOC);

// fetch
while($r = $q->fetch()){
  print_r($r);
}

我知道它像mysql_fetch_assoc一样获取数据。但是,这是我从网上找到的另一个代码。

$stmt = $pdo->prepare('SELECT * FROM employees WHERE name = :name');

$stmt->execute(array('name' => $name));

foreach ($stmt as $row) {
    // do something with $row
}

最后,这个:

$stm = $pdo->prepare('SELECT * FROM table LIMIT ?, ?');
$stm->bindParam(1, $limit_from,PDO::PARAM_INT);
$stm->bindParam(2, $per_page,PDO::PARAM_INT);
$stm->execute();
$data = $stm->fetchAll();

为什么有这么多不同的方法来获取数据? 我以某种方式发现使用bindParam,你能够为变量设置整数或字符串吗?但是下面有这个......

$pdo->execute(array(':col2' => $col2, ':col3' => $col3, ':col4' => $col4));

我是否仍然可以混合整数和字符串而不声明它是整数还是字符串?

如果我喜欢这样可以吗?在执行数组中混合字符串和整数...

$sql = "INSERT INTO books (id,author) VALUES (:id,:author)";
$q = $conn->prepare($sql);
$q->execute(array(':author'=>'string', ':id'=>1));

而且,以上所有代码是否都避免了SQL注入? 我不知何故更喜欢执行数组方法,因为它更短,我不想每次都使用bindParam方法声明它是否是整数或字符串。

0 个答案:

没有答案