相关疑难解决方法(0)

PDO MySQL:是否使用PDO :: ATTR_EMULATE_PREPARES?

这是我到目前为止所读到的PDO::ATTR_EMULATE_PREPARES:

  1. PDO的准备仿真对性能更好,因为MySQL的本机准备绕过了查询缓存.
  2. MySQL的本机准备更好于安全性(防止SQL注入).
  3. MySQL的本机准备更适合错误报告.

我不知道这些陈述是多么真实.选择MySQL接口时我最担心的是阻止SQL注入.第二个问题是表现.

我的应用程序目前使用过程MySQLi(没有预处理语句),并且使用了很多查询缓存.它很少会在单个请求中重复使用预准备语句.我开始转向PDO以获取已准备好的语句的命名参数和安全性.

我正在使用MySQL 5.1.61PHP 5.3.2

我应该PDO::ATTR_EMULATE_PREPARES启用还是不启用?有没有办法既具有查询缓存的性能又具有预准备语句的安全性?

php mysql pdo

113
推荐指数
7
解决办法
5万
查看次数

如何在PDO PHP中查看查询错误

try {
    $db = new PDO("mysql:host=".HOST.";dbname=".DB, USER, PW);
    $st = $db->prepare("SELECT * FROM c6ode");
}
catch (PDOException $e){
    echo $e->getMessage();
}
Run Code Online (Sandbox Code Playgroud)

在上述情况下如何检查查询的mysql错误?

php mysql pdo

66
推荐指数
4
解决办法
10万
查看次数

Php准备好的声明关闭了仿真

使用带有pdo的预准备语句时,关闭仿真是否有任何副作用?我正在使用select*并限制需要作为int而不是字符串处理的结果.我可以做两件事之一.

$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
Run Code Online (Sandbox Code Playgroud)

或者使用param类型显式绑定这些变量:

$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();
Run Code Online (Sandbox Code Playgroud)

任何利弊?显然,关闭仿真可以节省很多绑定.

php prepared-statement fetchall

7
推荐指数
2
解决办法
4409
查看次数

标签 统计

php ×3

mysql ×2

pdo ×2

fetchall ×1

prepared-statement ×1