- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
一:如果我使用 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/
我使用 Spring Framework 3.0.5、Hibernate 3.6 和 MySQL Server 5.1。我有一些关于事务管理的一般问题。我个人从 spring 开始使用声明式事务管理。
在 composer require irazasyed/telegram-bot-sdk ^2.0 运行正常之后,现在我正在尝试使用 composer require erlangb/betfair
我在 Windows 10 上的 vagrant 设置中安装了 php 7.0.29 版本。 当我运行以下命令时 composer require --dev phpunit/phpunit 我得到了
我是一名优秀的程序员,十分优秀!