0

我在 Ubuntu 上的 localhost 有一个小问题,无法接受从 PHP 文件到 MySQL 数据库的带有撇号的数据。

例子:

It's your birthday!

我的本地主机数据库不会接受它,它也不会接受它附带的任何东西。

例子:

Its your birthday!

只要没有张贴撇号,我的本地主机数据库和其他所有内容都会接受。

我怎样才能让我的本地机器像我的在线服务器一样接受撇号以及发布到数据库的数据?这将更能确保我的代码在开发时工作。

我想让我的本地主机像我的服务器一样接受数据而不使用 mysql_real_escape_string()。

4

2 回答 2

2

您需要在使用该函数将字符串插入数据库之前对其进行转义,请参见此处mysql_real_escape_string()的文档

更新:您应该在您的 php.ini 文件中将 magic_quotes_gpc 设置为“on”,这将使服务器通过在特殊字符之前添加 \ 来转义特殊字符,就像addslashes()PHP 函数一样,但我建议使用mysql_real_escape_string()函数,因为它会使 mysql 转义字符串和它比添加斜杠功能更好,或者您可以使用像我用来执行此操作的此功能这样的功能:

function mysql_prep($value) {
  $magic_quotes_active = get_magic_quotes_gpc();
  $new_enough_php = function_exists( "mysql_real_escape_string" );
        // i.e. PHP >= v4.3.0
  if( $new_enough_php )  // PHP v4.3.0 or higher
  {
            // undo any magic quote effects so mysql_real_escape_string can do the work
    if( $magic_quotes_active ) 
    { 
     $value = stripslashes( $value );
    }
     $value = mysql_real_escape_string( $value );
  } else // before PHP v4.3.0
     { 
      // if magic quotes aren't already on then add slashes manually
         if( !$magic_quotes_active ) 
         { 
         $value = addslashes( $value ); 
         }
    // if magic quotes are active, then the slashes already exist
      }
  return $value;
 }
于 2011-05-11T10:20:37.340 回答
1

我想让我的本地主机像我的服务器一样接受数据而不使用 mysql_real_escape_string()。

你应该反过来做。魔术引号在 PHP6 中已被弃用并被完全删除,因为它是一个 Bad Idea™。正如手册所说,“非常不鼓励依赖此功能。”。

于 2011-05-11T14:11:31.710 回答