-1

我使用 PHP 和 MySQL 作为主要语言,而 TinyMCE 用于 WYSIWYG 功能。问题是每次我尝试在文本编辑器上放置一个撇号时都会出现 MySQL 错误。错误似乎是这样的:

执行查询时发生错误。请将此错误通知网络开发人员。

注意:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以获取正确的语法,以使用 near 绝对是适合您的程序。

马尼拉国际语言学院('在第 1 行

该声明将我引向这组代码:

function ExecuteQuery($strquery){
  $rs = mysql_query("$strquery") or 
        die('<br><br>An error occured upon executing query.<br>Please notify the web developer about this error.<br><br>NOTE: '.mysql_error());
  return $rs;
}

但我似乎无法理解这个问题。在这里需要一些帮助。太感谢了。

4

3 回答 3

3

您看到错误是因为撇号在 Mysql 中具有特殊含义。正如伊恩所说,你必须mysql_real_escape_string使用$strquery

不使用转义会导致严重的 SQL 注入安全问题。http://www.unixwiz.net/techtips/sql-injection.html

function ExecuteQuery( $strquery ) {
  $rs = mysql_query(mysql_real_escape_string($strquery)) or 
        die('<br><br>An error occured upon executing query.<br>Please notify the web developer about this error.<br><br>NOTE: '.mysql_error());
  return $rs;
}
于 2013-01-01T12:04:59.833 回答
1

我想你的查询是这样的......

INSERT INTO table VALUES ('blah blah blah');

现在,想象一下当您尝试插入的文本包含单引号/撇号时会发生什么......

INSERT INTO table VALUES ('This won't work.');

查询参数内容中的任何单引号都会破坏您的代码。您需要mysql_real_escape_string在查询参数上使用。

更好的是,将 PDO 或 MySQLi 与准备好的语句一起使用。

于 2013-01-01T11:59:04.743 回答
0

您的查询如下所示:

INSERT INTO table (textfield) VALUES ( 'your editor value' );

现在,您可能不会转义输入值,因此文本中的撇号会破坏查询

INSERT INTO table (textfield) VALUES ( 'your ' editor value with apostrophe' );

阅读本文了解转义,还请仔细查看红色框

于 2013-01-01T12:04:42.253 回答