sql语句中出现单引号导致报错

sql语句

$sql_insert = "insert into tabs(name,singer,address) values ('$name','$singer','$songaddress')";
$res_insert = $conn->query($sql_insert);

问题

我的$name、$singer、$songaddress 变量中会出现单引号,导致引号之间相互冲突,这时sql的语句无法执行,请教大神如何解决?

阅读 1.3k
评论 2018-08-14 提问
    5 个回答
    qakcn
    • 2.7k

    addslashes函数了解一下

    评论 赞赏 2018-08-14
      ezmo
      • 6.9k

      将你变量$name、$singer、$songaddress 中的字符串中的单引号

      1. 或加上转义字符,变成\'
      2. 或者在变量中使用两个单引号替换原来的一个,变成''
      3. 或者对变量直接使用 addslashes函数完成特殊字符转义。
      评论 赞赏 2018-08-14

        sql中,用两个个单引号,表示一个不是字符边界的单引号:

        select 'fff''fff' ff
        评论 赞赏 2018-08-14

          不要拼接SQL了。容易导致SQL注入。
          使用PDO对象来操作数据库,使用预处理语句来处理你的SQL防止SQL注入:

          /* 通过绑定的 PHP 变量执行一条预处理语句  */
          $calories = 150;
          $colour = 'red';
          $sth = $dbh->prepare('SELECT name, colour, calories
              FROM fruit
              WHERE calories < :calories AND colour = :colour');
          $sth->bindParam(':calories', $calories, PDO::PARAM_INT);
          $sth->bindParam(':colour', $colour, PDO::PARAM_STR, 12);
          $sth->execute();

          http://php.net/manual/zh/clas...

          评论 赞赏 2018-08-14

            用转义符+双引号,如:
            $sql_insert = "insert into tabs(name,singer,address) values (\"$name\",\"$singer\",\"$songaddress\")";

            评论 赞赏 2018-08-31
              撰写回答

              登录后参与交流、获取后续更新提醒