【问题标题】:Which kind of quote combination is preferred for MySQL queries in PHP?PHP 中的 MySQL 查询首选哪种引号组合?
【发布时间】:2014-04-29 15:58:49
【问题描述】:

当使用 PHP 插入 MySQL 时,我可以执行以下任一操作:

$query = 'INSERT INTO tablename SET id = "4"';
$query = "INSERT INTO tablename SET id = '4'";
$query = 'INSERT INTO tablename SET id = \'4\'';
$query = "INSERT INTO tablename SET id = \"4\"";

是否有理由(安全性、性能、代码可读性……)为什么我应该更喜欢其中之一?

【问题讨论】:

  • 你想要哪个。
  • 你在这里有一个很好的答案:stackoverflow.com/questions/11321491/…
  • 你想要哪一个,只要你准备好你的陈述
  • 就我个人而言,我总是使用双引号包裹的查询。打字少了,出错的余地也少了。 这只是我 ;-)

标签: php mysql quotes


【解决方案1】:

我认为这是最常见的格式:

$query = "INSERT INTO tablename SET id = '4'";

因此,您可以轻松地返回并像这样执行变量扩展:

$id = 4;
$table = "tablename";
$query = "INSERT INTO $table SET id = '$id'";

如果4是用户传入的,你可以改用参数化查询并绑定参数以避免SQL注入:

$id = $_POST["id"];
$table = "tablename";
$stmt = $con->prepare("INSERT INTO $tablename SET id=:id");
$stmt->bindParam(":id", $id);
$stmt->execute();

【讨论】:

    【解决方案2】:

    就像 Martin Bean 提到的那样,使用准备好的语句是个好主意:

    $stmt = $con->prepare("INSERT INTO tablename SET id=?");
    $stmt->bind_param(4);
    $stmt->execute();
    $stmt->close();
    

    【讨论】:

      【解决方案3】:

      这取决于情况,在你的情况下应该是:

      $query = 'INSERT INTO tablename (id) VALUES (4)';

      如果你想插入一个整数和一个字符串,它应该是:

      $query = "INSERT INTO tablename (id, name) VALUES (4, 'New York')";

      如果您想通过直接在查询中插入变量来构建查询,则应该是:

      $query = "INSERT INTO tablename (id, name) VALUES ($id, '$city')";

      • 构建这样的查询很容易出现 SQL 注入。

      如果您想使用例如PDO library 来构建查询,它会是:

      $query = 'INSERT INTO tablename (id, name) VALUES (:id, :city)';

      【讨论】:

      • 如果您不正确答案,我将保留反对票,但您可以INSERT INTO ... SET col = ...
      • @MarcusAdams 有趣的是,我从未见过INSERT 语句的这种用法。
      • 为什么要在第一个和最后一个语句上使用单引号?
      • @MarcusAdams 因为如果我使用"",那么 PHP 解释器会在字符串中查找变量。
      • @MarcusAdams 如果我将字符串包裹在 "" 中并且我不在字符串中使用变量,那么出于可读性目的,"Jake's mom"'Jake\'s mom' 可读性更好。
      猜你喜欢
      • 2014-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-23
      • 2021-05-21
      • 2016-05-13
      • 1970-01-01
      • 2012-02-01
      相关资源
      最近更新 更多