gpt4 book ai didi

php - 我对 pdo 的结论正确吗?

转载 作者:行者123 更新时间:2023-11-29 22:19:32 25 4
gpt4 key购买 nike

一:如果我使用 bindParam(); ,然后execute(); will 没有参数。但是如果我使用数组而不是 bindParam();然后execute();意志有争论。像这样的东西:

// one
$queryResults->bindParam(1,$test);
$queryResults->execute();

// two
$params = array($mfg, $price);
$queryResults->execute($params);

是吗?是还是否?

<小时/>

二:我使用prepare($query);以防止恶意代码。

是吗?是还是否?

<小时/>

三: fetchAll();fetch(); 快,但需要更多内存。

是吗?是还是否?

<小时/>

四:使用::代码是可选的。例如:fetchAll(PDO::FETCH_ASSOC);fetchAll();是一样的。

是吗?是还是否?

<小时/>

五:我无法在union中使用未命名的参数,我必须使用命名参数。

是吗?是还是否?

<小时/>

六:使用try {} catch(){}是为了方便捕获和处理错误,使用 try {}不是强制性的。

是吗?是还是否?

<小时/>

七:

(第一部分) 在 PDO 中,如果变量不存在,我可以使用 query();exec(); ,但是当我有一个变量时,我应该使用 prepare(); 。这样对吗 ?是还是否?

(第二部分)两者都是相同的。这样对吗 ?是还是否?

$db->query('SELECT * FROM table');
$db->exec('SELECT * FROM table');

最佳答案

:是的,你是对的。如果将数组作为参数传递给 execute 方法,那么它将把它作为绑定(bind)参数处理,并将其视为字符串 (PDO::PARAM_STR) .

两个:是的,但您必须将其与 bindParam()bindValue() 或参数化 一起使用>执行()。您必须确保转义所有来自用户的数据(例如表单帖子或查询字符串)。

:是的,根据>this< Stackoverflow 的答案,正如你所描述的那样。

:是,否:是,因为它是可选的(它们只是常量整数值)。不,fetchAll(PDO::FETCH_ASSOC)fetchAll() 不同。如果在实例化 PDO 类时使用选项参数,则可以更改默认获取模式以与 fetchAll() 一起使用。例如:

$params = array(
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
);
$db = new PDO("mysql:host=" . $host . ";dbname=" . $dbname, $user, $pwd, $params);

您还可以在现有实例上使用 setAttribute() 方法以非常类似的方式设置默认获取模式:

$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);

结果是一样的。任何不带参数的后续 fetch()fetchAll() 调用都将使用您设置的提取模式,或者直到实例处于事件状态为止。

默认的获取模式是PDO::FETCH_BOTH,它返回一个具有关联索引和从零开始的数字索引的数组,如下例:

Array
(
[0] => Array
(
[id] => 675
[0] => 675
[some_value] => foo
[1] => foo
)

[1] => Array
(
[id] => 681
[0] => 681
[some_value] => bar
[1] => bar
)
)

:我不太确定你的意思。可以在 PDO 中使用未命名参数,但如果将关联数组传递给 execute(),则会显示错误。解决这个问题的方法是,当您将数组传递给 execute() 时,对数组调用 array_values() 。示例:

$parameters = array(
"id" => 123,
"some_value" => "foo"
);
$db->prepare("SELECT * FROM table_name WHERE id = ? AND some_value = ?");
$db->execute(array_values($parameters));

对于 union 运算符(和类似的项目),您应该仅使用命名参数。 see here

:使用 try-catch 是完全可选的,它取决于您的实现和错误处理偏好。我更喜欢使用带有 try-catch 的异常,但您可以使用警告或静默错误代码,如 PDO::SetAttribute 文档 >here< 的相关部分所述。 .

可以在 PDO 实例化期间使用选项参数或在现有 PDO 实例上使用 setAttribute() 方法来设置这些属性。示例:

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/*
PDO::ERRMODE_EXCEPTION can be replaced with either
PDO::ERRMODE_SILENT or PDO::ERRMODE_WARNING
*/

如果有不清楚的地方,或者您认为我没有就该部分提供完整的答案,请告诉我,我会更新答案。

关于php - 我对 pdo 的结论正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30888889/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com