- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
两部分问题。
示例代码:
$result = pg_query_params($pg_connection, <<<'EOQ'
INSERT INTO accounts (username, salt, hash, created, lastlogin)
VALUES ($1, $2, $3, NOW(), NOW())
EOQ
, array($username, $salt, crypt($password, $salt)));
谢谢。
最佳答案
pg_query_params() 只使用一次往返。这是 postgres 有线协议(protocol)的一个特性,它允许分别发送查询和参数,而不必等待两者之间的回复。
你不能真正计算往返次数,但你可以查看源代码,或者在查询具有非零 ping 时间的服务器时简单地查看查询时间。
仅供引用,在本地主机上运行的 postgres 服务器上,使用真正的准备语句(即 PDO)在非常简单的查询(因为它使用 2 次往返)上比 pg_query_params() 慢得多(>2x...)。
关于准备好的语句:Postgres 有几种执行查询的方法。
带有嵌入式参数的原始 SQL(oldskool 方式):它仍然有用,并且是构建 IN() 或 VALUES() 列表的唯一方式。处理引用的适当 API 层是必须的(la python DBAPI)。在用户代码中直接调用 quote() 的任何痕迹都是麻烦的迹象!
单独使用准备好的语句 (pg_query_params):这是协议(protocol)的一种特殊情况,其中“准备”和“使用参数执行”消息在单个数据包中发送。从用户的角度来看,它的速度与原始 SQL(一次往返)大致相同,服务器上的解析开销略少(可能对 INSERT 大数据有用),并且自动安全(无引用)。不过,您需要用数组 (=ANY, unnest()) 替换 IN() 和 VALUES() 列表。 Postgres 将在查询计划中使用参数值,因此您会得到好的计划。
真正的准备语句(PDO、prepare 等):如果您想支付一次计划成本并执行多次,那么这些语句很好(尽管循环中的 SQL 查询通常是错误的)。两次往返,对于主键上的简单 SELECT 慢得多。如果您准备了不计其数的计划但事后没有重新分配它们,可能会占用 postgres 内存。参数通常不用于查询计划(因为那时它们不可用),因此您可能会得到非最佳查询计划。最后,这对于 Postgres 和 PHP 都不会缓存查询计划的 PHP 应用程序来说毫无用处。如果您使用的应用程序服务器为常见的简单查询保留缓存的查询计划,那么准备好的简单查询(如主键上的 SELECT)将比未准备的简单查询使用更少的服务器 CPU(比自称的速度快得多实际上是 MyISAM 之王)。
关于php - pg_query_params 使用了多少次往返?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260735/
我不确定为什么会失败,我有两个示例,它们的功能相同,但一个有效,另一个无效。我真的想要那个不起作用的函数,因为它可以让我将大量可能重复的代码放入一个函数中。 这会调用 setItemWorks 或 s
可以使用pg_query_params 方法查询数据库,例如: pg_query_params($connection, 'SELECT foo FROM bar WHERE id=$1 AND na
两部分问题。 根据标题,pg_query_params 使用了多少次往返? 如何计算脚本中的数据库往返次数? 示例代码: $result = pg_query_params($pg_c
我使用过一些 Postgresql,但我还是个新手。我通常默认创建太多的查询并通过黑客攻击从查询中获得我需要的结果。这次我想写一些更精简的代码,因为我要处理一个大型数据库,代码需要尽可能简洁。 所以我
我们大量使用 pg_query_params() 从 PHP 查询我们的 PostgreSQL 数据库。在分析 postgres 日志时,我们的查询记录如下: SELECT email_add
在 PHP 5.3.29 中尝试使用 pg_query_params() 向我的远程 PostgreSQL 9.3 数据库发出请求时,我有时会从 Apache 收到一个模糊的错误: Warning:
多年来我一直在努力解决这个问题,但我似乎无法弄清楚哪里出了问题。 这按预期工作: $query = "SELECT DISTINCT(name) FROM customers WHERE name I
pg_query_params( SELECT * FROM example WHERE date >= (NOW() - INTERVAL '1 day'), array() ); 以上语法可以工作
是否有与 pg_query_params 等效的 mysql? 最佳答案 检查 mysqli_prepare()或 P DOStatement() .两者有点不同,但仍然使用准备好的语句。 关于mys
我在 PostgreSQL 表中有一个 boolean 列。在 pgAdmin III 中, TableView 显示列的“TRUE”和“FALSE”。当我执行 SQL“select *”时,另一个窗
我需要做这个查询: SELECT * FROM property_select(ARRAY[8,9,10,11,12,13,14,15,16,17,19,20,26,28]) 使用 PHP 函数 p
我在 8 个字段构建了 10,000 行的大型多行插入查询,这意味着我将 90,000 个值作为数据数组传递给 pg_query_params。 我收到了这个错误: Warning: pg_query
我想使用 PHP pg_query_params 方法将 unix 时间戳值插入到 postgres 时间戳列中,但卡住了。 这是不完整的代码: $con = pg_connect(...); $st
我是 postgresql/postgis 的新手,想通过调用 pg_query_param 将几何点类型插入到我的数据库中。我尝试了以下方法: $query = "INSERT INTO userl
PHP 版本:7Postgres 版本:9.6 我们正在开发一个向 postgres 数据库发送查询的 Web 应用程序,目前我正在更新一些易受 sql 注入(inject)攻击的查询。但是,当使用
$Query = pg_query_params($db, 'SELECT username FROM users WHERE id = $1 AND password=(crypt(\'$2\',p
我是一名优秀的程序员,十分优秀!