【问题标题】:PHP parse error: syntax error for sql statementPHP解析错误:sql语句的语法错误
【发布时间】:2014-07-28 21:34:54
【问题描述】:

我在 PHP 中的以下 SQL 语句行有什么问题,导致语法/解析错误。非常简单的问题,但我非常感谢您的回答。

$sql = "SELECT * FROM my_table WHERE column1 = '$_POST["my_value"]'";

以下是错误: “解析错误:语法错误,意外'”',期望标识符(T_STRING)或变量(T_VARIABLE)或数字(T_NUM_STRING)”。我根据错误更改了代码(在$_POST中将“更改为'或删除它例如) 但再次收到错误。提前感谢您的帮助。

【问题讨论】:

  • 绝不允许将用户输入直接注入到任何 SQL 查询中 - Little Bobby Tables
  • 解决这个问题的最佳选择是使用绑定变量;即使这意味着切换到 MySQLi 或 PDO

标签: php sql


【解决方案1】:

您使用的语法确实不正确。以下是一些修复语法的选项:

$sql .= " column1 = '$_POST[my_value]'";
$sql .= " column1 = '{$_POST["my_value"]}'";

更多信息请参见the PHP documentation on string interpolation

但是,请注意,您很容易受到使用此代码的 SQL 注入攻击。如果用户输入文字' AND column1 = (DELETE FROM other_table) AND '怎么办?您的查询变为:

SELECT * FROM my_table WHERE column1 = ''
AND column1 = (DELETE FROM other_table)
AND ''

这可能会或可能不会在 MySQL 上做任何事情,但它向您展示了如何允许用户将他们自己的 SQL 注入您的查询中,这可能会让他们做非常糟糕的事情。有关此主题的进一步阅读,请参阅以下问题:How can I prevent SQL-injection in PHP?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2015-05-28
    • 1970-01-01
    相关资源
    最近更新 更多