【问题标题】:Performance overhead for PHP string concatenation? [duplicate]PHP字符串连接的性能开销? [复制]
【发布时间】:2012-02-05 02:14:45
【问题描述】:

我很快就要开始一个新项目,并打算使用编码标准。我总是这样写 SQL 语句:

$sql = sprintf("INSERT INTO users (name) VALUES ('%s')", $name);

我想知道使用以下其中一种是否可以获得任何性能:

$sql = "INSERT INTO users (name) VALUES ('".$name."')";
$sql = "INSERT INTO users (name) VALUES ('$name')";

另外:这种性能差异是否会随着添加更多“参数”而波动(如第一行代码的情况)?

谢谢。

【问题讨论】:

  • 你有什么理由不使用准备好的语句?
  • 我是准备好的语句的新手,并且正在考虑使用它们,是的,但仍然会很有趣
  • 您是否尝试过对这些进行基准测试?
  • 语法不会影响性能,数据操作会。如果您想要具体的答案,请在您的环境中对代码进行基准测试。投票结束(过于本地化)。我同意 Tim,使用准备好的语句而不是混合 SQL 字符串。
  • 这不是一个好主意。想象一下如果你有$name = "'); drop table ***"; ...会发生什么。如果您需要可衡量的性能提升,请使用准备好的语句。

标签: php string performance


【解决方案1】:

是的,这将提高性能。 sprintf 是一个附加函数调用,必须扫描您的字符串以查找需要额外时间的 %s。

使用字符串连接运算符 (.) 的第二个选项更快,但第三种选择,由于 PHP 执行的其他优化,将字符串变量放在字符串中最快。

无论如何,在研究 PHP 如何处理字符串连接及其执行方式时,您不应该创建这样的 sql 查询,因为它会打开您的代码以进行 SQL 注入。首先将 mysql_real_escape() 应用于您的参数或使用准备好的语句。

【讨论】:

  • 支持安全信息。
  • 正是我想要的。谢谢!
【解决方案2】:

我的测试没有显示 $a $b$a . ' ' . $b 快 - 有时甚至更慢。

但两者都是边缘的。当您有三个或更多变量时,通常需要sprintf

【讨论】:

    猜你喜欢
    • 2010-09-12
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 2022-09-30
    • 2014-06-05
    相关资源
    最近更新 更多