【问题标题】:INSERTing very long string in an SQL query - ERROR在 SQL 查询中插入很长的字符串 - 错误
【发布时间】:2012-08-11 18:59:40
【问题描述】:

问题是,每当我以我的 php 页面的形式输入一个大文本并尝试通过 SQL 查询到数据库中 INSERT 它时,它都会给我这样的错误:

“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本相对应的手册,以在 ' '示例标题' 附近使用正确的语法,'在雨季的漫长几个月中闭嘴1号线的房间”

查询是这样的:

$sql = "INSERT INTO `d` (`user_id`, `title`, `message`) VALUES ($user_id, '$topic', '$message')";

有趣的是,当我手动插入值并在 phpmyadmin 中运行查询时,它没有给我任何错误。

【问题讨论】:

    标签: php mysql string insert long-integer


    【解决方案1】:

    我敢打赌,字符串中有单引号 ( ' )。在您的 INSERT 中使用之前转义 $topic

    【讨论】:

      【解决方案2】:

      使用准备好的语句:

      $db = new PDO(...);
      $stmt = $db.prepare("INSERT INTO `d` (`user_id`, `title`, `message`) VALUES ($user_id, :topic, :message)");
      // I'm assuming that title is a VARCHAR(50) and message is a VARCHAR(500)
      $stmt->bindParam(":topic", $topic, PDO::PARAM_STR, 50);
      $stmt->bindParam(":message", $topic, PDO::PARAM_STR, 500);
      $stmt->execute();
      

      这将转义/正确传递数据的工作直接交到数据库引擎手中 - 这是它所属的地方。尽可能避免从用户输入构建 SQL 字符串,这样可以避免许多潜在的 SQL 注入攻击。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多