【问题标题】:Concatenate variables inside of a query在查询中连接变量
【发布时间】:2012-08-12 05:25:40
【问题描述】:

连接此查询的正确方法是什么?

$query2= "SELECT * FROM relationships WHERE user_1= '.$_SESSION['user_id'].'     
AND user_2= '.$user_id.' ";

我不断收到此错误:

解析错误:语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,在第 32 行的 C:\xampp\htdocs\beta\profile.php 中需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING

【问题讨论】:

  • 请帮自己一个忙,通过使用参数化查询而不是连接字符串来防止可能的 sql 注入。通过连接未转义的字符串,有人窃取、修改或删除您的所有数据只是时间问题。这是一场等待发生的灾难。 stackoverflow.com/a/60496/36866

标签: php mysql


【解决方案1】:

连接此查询的正确方法是什么?

让您的 SQL 库/客户端/服务器为您执行此操作(同时免费转义特殊字符)。尝试通过将字符串混合在一起来构建代码相对容易出错,并且涉及到各种引号字符的巧妙组合,这可能会变得难以维护。

请改用prepared statements and bound arguments

【讨论】:

  • 当你连接字符串时不要忘记 SQL 注入攻击的风险......
【解决方案2】:

单引号和双引号的嵌套不正确。

$query2= "SELECT * FROM relationships WHERE user_1= '" . $_SESSION['user_id'] . "' AND user_2= '" . $user_id . "'";

【讨论】:

  • 这是正确答案。问题是关于字符串连接,它不是就如何访问数据库征求意见。
  • @Alnitak:OP 提出了错误的问题这一事实并不能证明对回答它的答案投反对票是合理的。
  • @Eric 正是这个。此处不保证反对票。这个答案和this answer 都正确回答了被问到的问题。如果您不同意 OP 使用的方法,请对问题发表评论,不要对正确答案投反对票。
  • 在不指出安全问题的情况下回答书面问题是 IMNSVHO 不负责任的行为。
  • 评论比对正确答案投反对票更能教育 OP。
【解决方案3】:

要么:

$query2 = "SELECT * FROM relationships WHERE user_1='" . $_SESSION['user_id'] . "'AND user_2='" . $user_id . "'";

或者:

$query2 = "SELECT * FROM relationships WHERE user_1='${_SESSION['user_id']}' AND user_2='$user_id'";

修正你的语法错误。但是,通过串联形成查询是一个坏主意。至少,你应该 mysql_realescapestring 所有参数,如果不使用 PDO。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-16
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 2021-11-02
    • 1970-01-01
    相关资源
    最近更新 更多