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

sql语句

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

问题

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

阅读 7.1k
5 个回答

addslashes函数了解一下

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

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

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

select 'fff''fff' ff

不要拼接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...

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题