Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO:何时使用bindParam、execute(array))和PDO::FETCH_ASSOC?_Php_Pdo - Fatal编程技术网

Php PDO:何时使用bindParam、execute(array))和PDO::FETCH_ASSOC?

Php PDO:何时使用bindParam、execute(array))和PDO::FETCH_ASSOC?,php,pdo,Php,Pdo,我是PDO新手,事实上,这是我第一次使用它。一直以来,我都在使用mysql,而mysql已经贬值了。所以最近,我试图更新我所有的网站,以使用PDO,这是更好和更安全的,根据许多来源,我从互联网上找到 然而,这些教程让我更加好奇,充满了问题。我在谷歌上搜索了一整天,仍然找不到最好的答案或例子 让我们从下面的代码开始 // query $sql = "SELECT title FROM books ORDER BY title"; $q = $conn->query($sql); $q-&

我是PDO新手,事实上,这是我第一次使用它。一直以来,我都在使用mysql,而mysql已经贬值了。所以最近,我试图更新我所有的网站,以使用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注入吗?
我更喜欢execute array方法,因为它比较短,我不想每次都像使用bindParam方法一样声明它是整数还是字符串。

Executing array与binding params相同,只是更容易编写。它仍然会绑定参数并保护您不受sql注入的影响。有些人更喜欢使用
bindParam
/
bindValue
,因为它更详细,老实说,我不能责怪他们。执行数组时,所有数据都将作为字符串传入,无论传入的数据类型如何。执行
bindParam
时,您通过引用传递数据,这样您就可以更改它,就像在循环中一样,如果您需要强制执行数据类型,那么
bindParam
就是一种方法。但老实说,我很少看到使用
bindParam
,这里更多的是偏好问题。长话短说,要始终如一,要么选择其中一个。有关更多信息,请参见它基本上说了我刚才所说的,只是更详细。至于
PDO::FETCH_ASSOC
或FETCH,这只是返回数据的一种方便方式,这里再次想到了首选项。如果你想使用数组,那么使用数组,如果你想使用对象,那么使用对象。一点也不,数据库仍然尊重数据类型,字符串就是字符串,整数就是整数,小数就是小数等等。只有PDO会将它们视为字符串,但底层数据库将与提供的数据类型一起正常工作。哦,我差点忘了,看一看。它是关于
PDO::ATTR\u EMULATE\u准备的
。大多数人甚至不知道它的存在,但最好知道它的作用和使用时间。执行数组与绑定参数相同,只是更容易编写。它仍然会绑定参数并保护您不受sql注入的影响。有些人更喜欢使用
bindParam
/
bindValue
,因为它更详细,老实说,我不能责怪他们。执行数组时,所有数据都将作为字符串传入,无论传入的数据类型如何。执行
bindParam
时,您通过引用传递数据,这样您就可以更改它,就像在循环中一样,如果您需要强制执行数据类型,那么
bindParam
就是一种方法。但老实说,我很少看到使用
bindParam
,这里更多的是偏好问题。长话短说,要始终如一,要么选择其中一个。有关更多信息,请参见它基本上说了我刚才所说的,只是更详细。至于
PDO::FETCH_ASSOC
或FETCH,这只是返回数据的一种方便方式,这里再次想到了首选项。如果你想使用数组,那么使用数组,如果你想使用对象,那么使用对象。一点也不,数据库仍然尊重数据类型,字符串就是字符串,整数就是整数,小数就是小数等等。只有PDO会将它们视为字符串,但底层数据库将与提供的数据类型一起正常工作。哦,我差点忘了,看一看。它是关于
PDO::ATTR\u EMULATE\u准备的
。大多数人甚至不知道它的存在,但是知道它的作用和应该使用它的时间是个好主意。