相关疑难解决方法(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万
查看次数

PDOException:数据包乱序。预期收到 0 1。数据包大小=23

我有一个 Laravel Spark 项目,它使用 Horizo​​n 来管理 Redis 的作业队列。

在本地(在我的 Homestead 盒子、Mac OS 上)一切都按预期工作,但在我们新的 Digital Ocean(Forge 配置)Droplet(内存优化的 256GB、32vCPU、10TB 和 1x 800GB VPS)上,我不断收到错误:

PDOException: Packets out of order. Expected 0 received 1. Packet size=23
Run Code Online (Sandbox Code Playgroud)

或者该错误的某些变体,其中数据包大小信息可能不同。

经过数小时/数天的调试和研究,我在 StackOverflow 和其他地方看到了许多帖子,这些帖子似乎表明可以通过执行以下列出的许多操作来解决此问题:

  1. PDO::ATTR_EMULATE_PREPARES在我的 database.php 配置中设置为 true。这对问题绝对没有影响,实际上引入了另一个问题,即整数被转换为字符串。

  2. 设置DB_HOST127.0.0.1而不是localhost,以便它使用 TCP 而不是 UNIX 套接字。同样,这没有任何效果。

  3. DB_SOCKET通过登录 MySQL (MariaDB) 并运行将套​​接字路径列出为 来设置为 MySQL 中show variables like '%socket%';列出的套接字路径/run/mysqld/mysqld.sock。我也离开DB_HOST设置为localhost。这也没有效果。我确实注意到的一件事是,pdo_mysql.default_socket变量设置为/var/run/mysqld/mysqld.sock,我不确定这是否是问题的一部分?

  4. 我已将 MySQL 配置设置大幅增加到/etc/mysql/mariadb.conf.d/50-server.cnf以下内容: …

php mysql sockets pdo laravel

21
推荐指数
2
解决办法
6万
查看次数

标签 统计

mysql ×2

pdo ×2

php ×2

laravel ×1

sockets ×1